Вопрос про 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.

Другие вопросы по тегам