android长时间运行更新appwidget的操作

Jef*_*man 6 android android-appwidget

我有一个小部件,需要在onUpdate()中执行可能长时间运行的操作.只是直接执行操作导致ANR.为了解决这个问题,我的第一次尝试是在其中创建一个线程.我注意到在某些情况下小部件不会更新.我的猜测是,一旦onUpdate()退出,android可能会杀死进程以及未完成的线程.

我的下一次尝试是创建一个意向服务.小部件的onUpdate()只是启动intent服务,它直接完成工作并在完成后更新小部件.这很有用,但令我惊讶的是,onHandleIntent()似乎是单线程的.如果我有两个小部件,然后更新并启动意向服务,它们会按顺序更新...

两个小部件的情况并不重要,但我只是想知道这种模式的最佳实践.

为了解决这两个小部件的情况,每当点击其中任何一个时,我都会用相同的数据更新所有小部件实例.例如,我执行一次长时间运行的过程并将结果应用于所有小部件实例.在我的场景中这没关系,但对于许多小部件来说,重要的是不要这样做.

想法?

Com*_*are 3

但令我惊讶的是 onHandleIntent() 似乎是单线程的

是的。

如果我有两个小部件,然后都更新并启动意图服务,它们会按顺序更新......

是的。

但我只是想知道这种模式的最佳实践。

恕我直言,你IntentService是一个很好的解决方案。请记住,Android 运行在较慢的 CPU 上,并且设备的 RAM 很少。并行运行大量线程通常不是一个好主意。

然后我开始在 onHandleIntent() 中启动一个线程,这需要一个唤醒锁,而且看起来它变得太复杂了。

试试我的WakefulIntentService.