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