我已经将主屏幕小部件编写为 ImageView,即。该代码生成整个小部件并将其作为位图写入 RemoteViews。在内存较低的较慢设备上,例如我的 G1,生成位图可能需要几秒钟,为了避免可怕的强制关闭,我将所有图形代码移到 AsyncTask 中。到目前为止,一切都很好。
但是,在内存非常低的情况下,AsyncTask 很容易在它完成生成位图之前被操作系统杀死,从而导致主屏幕上出现一个空白方块。所以在创建 AsyncTask 之前,它设置了 now + 5 秒的警报,并且在图形完成后,它会重置警报。这里的假设是,如果触发警报,则很可能进程被杀死,我们必须设置另一个 now+5 警报并重新开始。
这确实有效,但在内存极低的情况下,绘制小部件可能需要多次尝试(20 多秒),所以我添加了一个占位符沙漏图像,作为静态资源,它显示在主屏幕上,直到真实图像准备好.
我的问题是:这是最好的方法吗?有没有办法(礼貌地)要求操作系统在 AsyncTask 完成之前不要杀死它(因为杀死它实际上会导致更多的系统资源浪费)?
我知道如果一个进程被归类为“可见”,那么 Android 不会杀死它,除非作为最后的手段。但我不知道如何将 AsyncTask 标记为“可见”。我很高兴该过程在绘制小部件后立即被终止。只是希望它能够存活足够长的时间来完成。