gpt4 book ai didi

Android - AppWidgets、AlarmManager 和 AsyncTask

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:28 25 4
gpt4 key购买 nike

我在使用 AlarmManager 生成的广播更新应用小部件时运气不佳。这是我的做法:

AppWidgetProvider#onEnabled 上初始化 AlarmManager

AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60000, pendingIntent);

我还定义了 BroadcastReceiver,它只监听 AlarmManager 触发的更新。当触发更新时,代码运行 AsyncTask 进行网络调用。当 AsyncTask 完成时 (onPostExecute),它使用先前获得的 AppWidgetManager 实例来更新小部件。

实际上一切都运行良好,直到我在日志中看到消息,此后 AlarmManager 再也不会触发另一个更新:

Process com.foo.myapp (pid 12345) has died

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

最佳答案

When update is fired code runs AsyncTask that makes a network call.

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

相反,您应该将长时间运行的工作委托(delegate)给 service started from the alarm BroadcastReceiver.

关于Android - AppWidgets、AlarmManager 和 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1864153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com