#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(...);
}