退出重程式序,TextView不可見(不顯示)問題(極少情況下遇到)

傲慢的上校發表於2012-11-08

  這個問題,在極少情況下可能會遇到,下面會有可能有效的解決方法,但是其中原理還不知道。

在專案中,線上程中獲取資訊,然後通過handler傳遞,在handler的handleMessage方法中處理資訊並且用一個TextView把資訊顯示出來。

demo版本程式碼:

public class DemoActivity extends Activity implements OnClickListener{
	private Button mButton;
	private TextView mTextView;
	public static int i = 0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		mButton = (Button)findViewById(R.id.button);
		mButton.setOnClickListener(this);
		mTextView = (TextView)findViewById(R.id.textView);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button:
			changeTextView();
			break;

		default:
			break;
		}
	}

	Handler mHandler = new Handler(new Handler.Callback() {

		@Override
		public boolean handleMessage(Message msg) {
			mTextView.setText("i = " + i++ + ", j = " + msg.arg1);
			return true;
		}
	});

	private void changeTextView() {
		new Thread(new Runnable() {

			@Override
			public void run() {
				int j = 0;
				try {
					while (j < 5) {
						j++;
						Message msg = Message.obtain();
						msg.arg1 = j;
						mHandler.sendMessage(msg);
						Thread.sleep(2000);
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}).start();
	}
}

情況近似於上面demo程式碼,但是上面程式碼中沒有出現下面將要說到得問題。在我的專案程式碼中,第一次裝上應用,完全沒有問題,handler傳遞訊息,handlerMessage方法處理訊息,然後可以在TextView中顯示出來。但是,當按返回鍵退出程式後,再一次進入,通過handler傳遞訊息,在handlerMessage方法中處理訊息,在log顯示,可以獲取訊息,但是TextView卻不能顯示。使用以下程式碼列印Log:

if (mResultText.isShown()) {
								Log.v("@@@@@@", "mResult is  shown  in @@@@@");
							} else {
								Log.v("@@@@@@", "mResult is not shown  in @@@@@");
							}

執行

Log.v("@@@@@@", "mResult is not shown  in @@@@@");
也就是說,當再次進入程式後,mResultText(一個textview)  isShown方法返回false,不可見。

設定為可見:

mResultText.setVisibility(View.VISIBLE);

也不起作用。

解決方法:

把mResultText設為靜態:

private static TextView mResultText;

問題解決,但是其中原理還不明白。如果有清楚原因者,望相告,謝謝(注:Activity的launchMode="singleInstance")。同時,這個問題應該很少會有人遇到。



相關文章