Я написал виджет домашнего экрана как ImageView, т.е.код генерирует весь виджет и записывает его в RemoteViews как растровое изображение.На более медленных устройствах с низким объемом памяти, таких как мой G1, генерация растрового изображения может занять пару секунд, и чтобы избежать страшного принудительного закрытия, я переместил весь графический код в AsyncTask.Пока все хорошо.
Однако в условиях очень низкого объема памяти AsyncTask может быть легко убит ОС до того, как он закончит генерировать растровое изображение, что приведет к появлению пустого квадрата на домашнем экране.Поэтому, перед созданием AsyncTask, он устанавливает будильник на + 5 секунд, а после завершения графики сбрасывает будильник.Здесь предполагается, что если сигнал тревоги сработал, более чем вероятно, что процесс был прерван, и мы должны установить еще один сигнал тревоги +5 и запустить его снова.
Это работает, но в условиях крайней нехватки памяти этоНа рисование виджета может потребоваться несколько попыток (более 20 секунд), поэтому я добавил в качестве статического ресурса изображение песочных часов-заполнителей, которое отображается на рабочем столе до тех пор, пока не будет готово реальное изображение.
У меня такой вопрос: это лучший способ?Есть ли какой-нибудь способ (вежливо) попросить ОС не убивать AsyncTask до его завершения (на том основании, что его уничтожение фактически приведет к более растрате системных ресурсов)?
IСледует понимать, что если процесс относится к категории «видимых», то Android не убьет его, кроме как в крайнем случае.Но я не знаю, как пометить AsyncTask как «видимый».Я очень рад за процесс, который будет убит, как только закончится рисование виджета.Просто хотел бы остаться в живых достаточно долго, чтобы завершить.