在我的Android应用程序中,有一个线程处理一些繁重的工作,然后使用处理程序更新UI。但是,启动一段时间后,线程会突然停止,没有任何信号或异常抛出。我不知道它是如何发生的。这是一个关于通过我自己的线程和UI线程访问相同变量的并发问题吗?以下是线程和处理程序的代码。Android线程突然停止
TextView textViewFromActivity;
String valueFromThread;
public void startThread() {
thread.start();
}
public Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if(valueFromThread != null && valueFromThread != "") {
textViewFromActivity.setText(valueFromThread);
}
}
}
public Thread thread = new Thread() {
public void run() {
while(true) {
doHeavyWorkAndUpdateValueFromThread();
handler.sendEmptyMessage(0);
}
}
}
更新:
以下线路时,文本视图停止更新显示在logcat中。
的logcat:
09-20 12:38:32.379: I/Choreographer(32250): Skipped 30 frames! The application may be doing too much work on its main thread.
09-20 12:38:33.441: I/Choreographer(32250): Skipped 32 frames! The application may be doing too much work on its main thread.
09-20 12:38:34.006: I/Choreographer(32250): Skipped 33 frames! The application may be doing too much work on its main thread.
09-20 12:38:34.640: I/Choreographer(32250): Skipped 36 frames! The application may be doing too much work on its main thread.
09-20 12:38:40.496: I/art(32250): WaitForGcToComplete blocked for 21.575ms for cause HeapTrim
09-20 12:38:58.146: I/art(32250): Background sticky concurrent mark sweep GC freed 132986(4MB) AllocSpace objects, 0(0B) LOS objects, 16% free, 16MB/19MB, paused 8.544ms total 42.510ms
09-20 12:39:10.765: I/art(32250): WaitForGcToComplete blocked for 8.361ms for cause HeapTrim
09-20 12:39:14.306: I/art(32250): Background sticky concurrent mark sweep GC freed 125390(3MB) AllocSpace objects, 0(0B) LOS objects, 17% free, 15MB/19MB, paused 5.645ms total 41.015ms
请张贴一些logcat的。 – Tauqir
发布,以上线时显示的文本视图停止更新。 –
有你用'findviewbyid'初始化'textViewFromActivity'' – Tauqir