Вопрос про runOnUiThread
Документ Android говорит о runOnUiThread: "Если текущий поток не является потоком пользовательского интерфейса, действие публикуется в очередь событий потока пользовательского интерфейса".
Мой вопрос заключается в том, будут ли разные действия использовать одну и ту же очередь событий, или у каждого действия будет своя собственная очередь событий?
Предположим, что действие A запускает поток, чтобы что-то сделать, и, наконец, обновляет пользовательский интерфейс, используя runOnUiThread, но в то же время запускает действие B, как показано ниже:
public class HelloAndroid extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Thread myThread = new MyThread();
myThread.start();
Intent intent = new Intent(this, B.class);
startActivity(intent);
}
private class MyThread extends Thread {
public void run() {
/* Do somthing expensive */
......
/* Update UI */
HellowAndroid.this.runOnUiThread(new Runnable() {
@Override
public void run() {
/* Do UI update for activity A */;
}
});
}
}
}
Что делать, если поток выполняет код "HellowAndroid.this.runOnUiThread(new Runnable...)", видимое действие уже B, а стек в настоящее время A B, с B вверху. Будет ли выполняться код "HellowAndroid.this.runOnUiThread (new Runnable...)" для обновления действия A? Что случится? Будет ли обновляться пользовательский интерфейс действия А в этом случае?
Благодарю.
1 ответ
Код потока Activity A все еще будет выполняться и попытаться обновить пользовательский интерфейс Activity A. Но имейте в виду, что при этом вы рискуете столкнуться с ошибками во время выполнения, если система по какой-либо причине остановила вашу деятельность (например, нехватка памяти).
Намного лучше запускать потоки в onResume и снова останавливать их в onPause.