在我的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