В моем приложении для 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, когда текстовое представление перестает обновляться.
Логкат:
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
textViewFromActivity
с помощьюfindviewbyid
- person Mohammad Tauqir   schedule 20.09.2015