Асинхронная задача Android — какое действие вызвало ее?

#android #android-asynctask

#Android #android-asynctask

Вопрос:

Я сталкиваюсь с проблемой наличия одной асинхронной задачи, но мне нужно, чтобы она использовалась дважды, потому что каждый раз, когда я меняю другую часть графического интерфейса (индикатор выполнения обновления).

Есть ли какой-либо способ определить в предложении if — else, какое действие оно вызывает, а затем создать соответствующую функцию для каждого из них обоих?

Редактировать: хм, ответ был здесь, а теперь его нет…

Спасибо

Ответ №1:

Вы можете содержать переменную-член, которая содержит действие / контекст, из которого оно запущено.

 //pseudocode
AsyncTask task = new AsyncTask();
task.mActivity = this;
task.execute();
  

Внутри doInBackground просто проверьте действие:

 //pseudocode
if (mActivity instanceof MyActivity) {
    // ....
} else {
    // ....
}
  

Ответ №2:

Извлеките код из реализации AsyncTask и делегируйте его действию. Пример:

 public interface MyDelegate {
    public void updateProgress(....)
}
  

Ваша AsyncTask принимает делегат и вызывает его при необходимости:

 public class MyAsyncTask .... {
    public MyAsyncTask(MyDelegate myDelegate) { ... }

    // somewhere in your code (probably onProgressUpdate)
    myDelegate.updateProgress(...)
}
  

Ваши действия реализуют делегат:

 public class MyActivity extends Activity implements MyDelegate {
   public void updateProgress(...) {
       // update ui
   }

   // somewhere in your code:
   new MyAsyncTask(this).execute(...);
}