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

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

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



评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值