Если я понял вашу идею правильно, вы хотите иметь массив AsyncTask
экземпляров, которые вы контролируете. В этом случае, поскольку они, вероятно, достаточно критически важных данных для хранения их в SoftReference
и подвергая опасности их содержимое из-за сборщика мусора, я лично изменил бы подход SoftReference
, чтобы воспользоваться структурой AsyncTask
.
Я бы сказал, что ArrayList
, но непосредственно из MyClass
экземпляров (не SoftReferences
). Вы можете реализовать метод в своем классе MyClass
, например setTaskId(int)
, и перед выполнением какой-либо задачи вы должны вызвать его, например, с индексом в вашем ArrayList
этого экземпляра.
Вы бы затем вызвать метод execute()
, и как только вы завершение работы, что AsyncTask
, метод onPostExecute()
будет называться, из которого вы хотите вызвать метод в вашем Fragment
сказать, что это экземпляр AsyncTask
уже закончился , и вы можете просто использовать yourArrayList.delete(on_that_id)
.
На ваш вопрос вы упомянули, что у вас есть несколько AsyncTasks
. Вы можете слить столько, сколько хотите, но read this, прежде чем делать это, потому что метод execute()
AsyncTask
подвергся кардинальным изменениям в изменениях версии, и вам может понадобиться соответствующий код для них.
--- EDIT ---
Использование AsyncTask
сек в Fragments
имеет дополнительное осложнение, к тому времени, AsyncTask
закончил, именно так, как вы прокомментируете, это может быть отсоединена. Таким образом, вам придется реализовать дополнительные логические механизмы, чтобы проверить, подключено ли оно через isDetached()
. Имейте в виду, что isDetached()
работает только в том случае, если вы явно отключили свой Fragment
, иначе вам понадобится isAdded()
.
Вам не нужно использовать его все время, просто имейте в виду Fragment
lifecycles и назовите его, когда вам нужно будет сделать действие, которое связано с подключением Fragment
.
Чтобы упростить это немного, вы можете переместить AsyncTask
инициализации и логику к родительскому деятельности, поэтому если Fragment
отсоединяется он может действовать надлежащим образом (как, например не отбрасывая результаты, если фрагмент больше не прилагается, или все что тебе нужно).
Be ** very ** тщательно используя 'WeakReferences' в Android. Имейте в виду, что приложение имеет макс. 16 Мбайт памяти, поэтому память собрана с гораздо большей частотой, чем в обычных фреймворках Java. Я бы предложил использовать минимально «SoftReference» и всегда проверять объекты на возможные освобожденные экземпляры. – nKn
Спасибо! Сейчас я перехожу на SoftReference. Я действительно знал это и забыл хе .. Кроме того, я обертываю все свои «get()» с помощью try & catch для случаев, когда ссылка потеряна. –