使用AlarmManager
生成的广播更新应用小部件时,我没有太多运气。这是我的所作所为:
在AlarmManager
AppWidgetProvider#onEnabled
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60000, pendingIntent);
我还定义了广播接收器,它只是监听AlarmManager
触发的更新。触发更新时,代码运行AsyncTask
进行网络呼叫。当AsyncTask
完成(onPostExecute
)时,它使用先前获得的AppWidgetManager
实例来更新小部件。
它实际上运行良好,直到日志中我看到消息"Process com.foo.myapp (pid 12345) has died"
,之后AlarmManager
永远不会触发另一个更新。
我是否需要进行某种检查以重启警报?例如,当用户访问小部件的父应用程序时?如果我的应用程序在请求过程中死亡,我如何确保完成长时间运行的任务并返回到窗口小部件?
答案 0 :(得分:4)
当触发更新时代码运行 发起网络呼叫的AsyncTask。
如果这在BroadcastReceiver
内,那将无效。您无法安全地从BroadcastReceiver
派生线程,AsyncTask
有效地要求线程异步执行其任务。
相反,您应该将长期投放的作品委托给service started from the alarm BroadcastReceiver
。