Android的 - AppWidgets,AlarmManager和的AsyncTask
-
16-09-2019 - |
题
我不具有更新与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
永远不会触发另一次更新运行良好。
我是否需要有某种形式的检查,这将重新启动报警?例如,当用户访问该控件的父应用程序?我如何确保我能完成的长时间运行的任务,回来的小部件,如果我的应用程序中请求的过程中死机?
解决方案
当更新被触发代码运行 的AsyncTask,使一个网络的呼叫。
如果这是BroadcastReceiver
内,这是行不通的。你不能从一个BroadcastReceiver
和AsyncTask
安全叉线有效地派生一个线程异步完成其任务。
相反,你应该委托长时间运行的工作提高到一个服务从 BroadcastReceiver
报警开始。
不隶属于 StackOverflow