У меня есть AsyncTask
, который никогда не умирает. Слушатель событий в этом AsyncTask
продолжает меняться (в зависимости от того, какой вид активности/фрагмента отображается пользователю). Для достижения этой цели, у меня есть установка как следующее:Android AsyncTask - Смена слушателей
- Интерфейс:
public interface TaskListener { public void onItemChanged(String itemName) }
- AsyncTask который содержит
TaskListener
переменную-член, зарегистрированный/незарегистрированный с использованием общественного методы.
public void registerListener(TaskListener listener) { mListener = listener; } public void unregisterListener() { mListener = null; }
- В
onPublishProgress()
метода (называемого с помощьюpublishProgress()
в методеdoInBackground()
) изAsyncTask
, я уведомить слушателя.
Теперь, мой вопрос: есть ли какие-либо оговорки в этой ситуации, сообщая слушателю? В частности, я хотел бы знать, является ли это потоком безопасным или нет. то есть, если вызываются в одно и то же время publishProgress()
и registerListener()
, будет ли правильный прослушиватель получать обратный вызов?
Почему вы говорите, что не должны жить между деятельностью? – 500865
AsyncTask не предназначен для этого, он намерен использовать внутри одного действия для выполнения тяжелой работы вне потока пользовательского интерфейса. Он имеет методы onPreExecute и onPostExecute, которые связаны с создателем активности. Услуги exaccty предназначены для использования так, как вы используете AsyncTask прямо сейчас. – Dmitry