Вопрос про runOnUiThread - PullRequest
       14

Вопрос про runOnUiThread

1 голос
/ 08 марта 2011

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 Ответ

3 голосов
/ 08 марта 2011

Код потока Activity A все еще будет выполняться и попытаться обновить пользовательский интерфейс Activity A.Но имейте в виду, что при этом вы рискуете столкнуться с ошибками во время выполнения, если система по какой-либо причине остановила вашу деятельность (например, нехватка памяти.)onResume и снова остановите их в onPause.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...