我在Activity中开了一个后台线程,负责获取数据,每个10秒通过Handler通知Activity的TextView显示(setText())。问题是当我按back键的时候,Activity会finish掉。再次启动时,依然能或得到线程发来的数据,但是却无法更新UI(setText()不更新)。如果按home键则没有问题,因为Activity不会finish掉。请高手指教啊!!!
解决方案 »
- 在线求解 proguard混淆的解释
- android Notification 置顶问题(android 状态栏中的通知置顶问题)
- widget添加至桌面代码怎么实现
- 关于AlarmManager的问题
- 多线程下使用SQLite是否有资源泄漏问题?
- android与PC蓝牙通讯
- 将一个图片嵌入更大的图片中,应该如何操作?
- Android 动画
- 请问关于findviewbyid 为null的问题
- 在华为手机上获取通讯录联系人为什么会出现要GLOBAL_SEARCH权限?
- 关于 Handler.removeCallbacks ,求真相
- 我java编程的小技巧 免去输入那么多的 System.out.println();之苦
而你第二次开启activity时,打印的信息已经不是你当前activity中handler所打印的,而是上一个activity创建的handler。因此当前的handler是没有获得数据,及去改变ui的。
所以建议你把获得统计数据的方法放在service里,每隔10秒发个广播,在你activity中去接收。
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;public class HandlerUpdateUITest extends Activity {
private static final String LOG_TAG = HandlerUpdateUITest.class
.getSimpleName();
TextView tv; Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
tv.setText((String) msg.obj);
Log.i(LOG_TAG, "tv.hashcode..." + tv.hashCode());
Log.i(LOG_TAG, "tv.setText..." + (String) msg.obj);
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.text); new Thread() {
public void run() {
Log.i(LOG_TAG, "Thread run...");
int i = 10;
while (i > 0) {
mHandler.sendMessage(Message.obtain(mHandler, 0,
String.valueOf(this.getId()) + i));
Log.i(LOG_TAG,
"Thread sendMessage..."
+ (String.valueOf(this.getId()) + i));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
i--;
}
}
mHandler.sendMessage(Message.obtain(mHandler, 0,
String.valueOf(this.getId()))); };
}.start();
}}