HardBirch

退出重进程序,TextView不可见(不显示)问题(极少情况下遇到)

时间:12-11-08 栏目:安卓源码解析与小应用 作者:张飞不张,文采横飞 评论:0 点击: 1,743 次

  这个问题,在极少情况下可能会遇到,下面会有可能有效的解决方法,但是其中原理还不知道。

在项目中,在线程中获取信息,然后通过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")。同时,这个问题应该很少会有人遇到。



退出重进程序,TextView不可见(不显示)问题(极少情况下遇到):等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐