2

我在使用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再也不会触发另一个更新。

我是否需要进行某种检查以重新启动警报?例如,当用户访问小部件的父应用程序时?如果我的应用在请求过程中死机,如何确保我可以完成长时间运行的任务并返回到小部件?

4

1 回答 1

4

当更新被触发时,代码运行 AsyncTask 进行网络调用。

如果这是在内部BroadcastReceiver,那将不起作用。您不能安全地从 a 派生线程BroadcastReceiver,并AsyncTask有效地派生一个线程以异步执行其任务。

相反,您应该将长时间运行的工作委托给从警报启动的服务 BroadcastReceiver

于 2009-12-08T04:55:46.397 回答