Обработчики завершения в Android

Я разработчик iOS, который совсем недавно попробовал разработку для Android.

В iOS я использую обработчики завершения в своих кодах.

Мне интересно, есть ли его эквивалент в разработке Android?

Спасибо


person JayVDiyk    schedule 16.12.2015    source источник
comment
Возможный дубликат обработчиков завершения в Java?   -  person yennsarah    schedule 16.12.2015


Ответы (1)


Если вам это нужно для выполнения асинхронных операций, загляните в AsyncTask — это класс, в котором вы реализуете doInBackground, где выполняется ваша длинная операция, и метод onPostExecute, где выполняется код, который должен обновлять пользовательский интерфейс.

Теперь, если вы хотите передать какой-то специальный код вашей AsyncTask для выполнения после длительной операции, вы можете:

(1) Передайте интерфейс, который будет реализован вашей активностью/фрагментом, например:

 // Psedocode to reduce size!
 interface MyInterface {
   void doWork();
 };
 class MyAsyncTask extends AsyncTask<Void,Void,Void> {
   MyInterface oper;
   public MyAsyncTask(MyInterface op) { oper = op; }
   // ..
   public onPostExecute(Void res) {
     oper.doWork(); // you could pass results here
   }
 }
class MyActivity extends Activity implements MyInterface {
   public void doWork() {
     // ...
   }

   public void startWork() {
      // execute async on this
      new MyAsyncTask(this).execute();

      // or execute on anynomous interface implementation
      new MyAsyncTask(new MyInterface() {
         public void doWork() {
            //MyActivity.this.updateUI() ...
         }
      });
   }
};

(2) Используйте локальные широковещательные приемники, EventBus, но это более тяжелые решения.

(3) Если у вас уже есть какой-то интерфейс обратного вызова в вашем фоновом рабочем коде, вы можете заставить его выполняться в потоке пользовательского интерфейса, используя этот код:

// This can be executed on back thread
new Handler(Looper.getMainLooper()).post(new Runnable() {
  @Override
  public void run() {
    // do work on UI
  }
});
person marcinj    schedule 16.12.2015