即使应用程序关闭,Android每天都会发送通知

3

我刚刚尝试了AlarmManager,想让我的应用程序每天下午3点发送一条通知。但是这只在应用程序仍在后台运行时才有效。当用户关闭应用程序时,AM将不再起作用。我该怎么做才能实现我想要的功能,而不是使用AlarmManager?

2个回答

6
但这仅适用于应用程序仍在后台运行的情况。
不,即使应用程序未运行,例如Android终止其进程以释放内存供其他应用使用,它也可以正常工作。
当用户杀死应用时,AM将不再起作用。
如果您指的是用户在设置中为您的应用程序点击了“强制停止”,则您的闹钟将被取消安排,并且您的应用程序中的任何内容都将不会再次运行,直到用户手动运行您的应用程序(例如,在主屏幕上点击您的启动器活动)。
我听说一些由无脑制造商制造的设备在用户从设备提供的“任务管理器”中停止应用程序时执行与“强制停止”相同的操作。这太不幸了。
在任何其他传统定义的“杀死”中,您的闹钟都不受影响。
我该如何替代AlarmManager来实现我的目标?
没有。如果用户强制停止您的应用程序,则用户不希望您的应用程序运行,因此您的应用程序将不会运行。

但是让我们举个例子:WhatsApp。当 WhatsApp 没有在我的手机上运行时,我仍然会收到 WhatsApp 中新消息的通知。这正是我想要做的,这怎么可能实现? - Phil
@Phil:他们使用AlarmManager(直接或间接地),或者他们接收推送通知(因为他们恰好是一个消息应用程序)。如果用户强制停止WhatsApp,则这两者都将被阻止,而在其他情况下这两者都可以正常工作。 - CommonsWare
嗯,我也使用AlarmManager,并且我的手机上有一个按钮,按下后会显示所有已启动的应用程序,我可以轻松地向右或向左滑动以关闭它们。如果我这样做WhatsApp,通知仍然会发送;如果我这样做我的应用程序,通知将不再发送。 - Phil
@Phil:那么你需要调试你的应用程序。你可以使用**adb shell dumpsys alarm**来查看预定的AlarmManager事件。例如,也许AlarmManager工作得很好,但是你在使用闹钟类型时犯了错误,比如没有使用WakefulIntentServiceWakefulBroadcastReceiver_WAKEUP闹钟一起使用。 - CommonsWare
我该如何使用WakefulIntentService和WakefulBroadcastReceiver?我只是使用普通的BR和Service。 - Phil
1
@Phil:那不会可靠地工作。您可以在文档中了解有关 WakefulBroadcastReceiver 的信息,这里是一个示例应用程序。我的 WakefulIntentService项目网站上有文档,并且这里是一个示例应用程序 - CommonsWare

2

您可以使用粘性背景服务来随时发送通知。通过一个简单的运行服务,您可以安排任何任务。对于可能需要防止处理器休眠的长时间运行的任务,请考虑使用wake_lock。还要考虑电池消耗。 祝好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接