Я разработчик iOS, который совсем недавно попробовал разработку для Android.
В iOS я использую обработчики завершения в своих кодах.
Мне интересно, есть ли его эквивалент в разработке Android?
Спасибо
Я разработчик iOS, который совсем недавно попробовал разработку для Android.
В iOS я использую обработчики завершения в своих кодах.
Мне интересно, есть ли его эквивалент в разработке Android?
Спасибо
Если вам это нужно для выполнения асинхронных операций, загляните в 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
}
});