我正在构建其中一个SOS应用程序。每当设备晃动超过阈值(通过加速度计检测到)时,我显示Toast
(截至目前)
1)推出应用程序。用户提供姓名,电子邮件等..并在最后一个屏幕上点击finish
。
2)启动Service
,持续听取震动。
3)如果应用正在运行,它会正确检测到震动。
4)如果我关闭了应用程序(activity
),服务就会被杀死。
即使应用已关闭,如何保持service
正常运行,以便它可以从后台听到震动? (这就是这个应用程序的全部目的)
[1.我正在onStartCommand
我还尝试使用BroadcasterReciever
,它将通过接收来自onTaskRemoved
我正在测试华硕Xenfone Max, Marshmallow OS ]
答案 0 :(得分:2)
您有两种选择:
startForeground(int id, Notification notification)
:docs。但在这种情况下,只要您的服务正在运行,您就必须在通知托盘中显示通知android:process=":nameofyourprocess"
答案 1 :(得分:0)
您可以将服务置于前台,在这种情况下,它将始终被视为活动(因此它将具有自己的通知,因此用户知道正在运行的活动服务)。它不会被阻止,直到它回到后台。这就是你想要的,因为你希望你的服务尽可能地保持活力。如Android Service documentation:
中所述已启动的服务可以使用 startForeground(int,Notification) API将服务置于前台状态,系统认为该服务是用户主动了解的内容,因此不是当内存不足时被杀的候选人。
活动和服务的想法是相同的,实际上:当Android需要内存时,它会开始查杀进程。前台进程(例如,屏幕上显示的Activity或前台服务)的优先级高于后台进程(例如,暂停的Activity),因此它们将是系统停止的最后一个进程。
使用START_STICKY只是告诉系统,如果它必须终止您的服务,那么您希望重新启动它可以。这并不能说这项服务的优先级高于其他服务。
答案 2 :(得分:0)
尝试启动服务而不将其绑定到活动(简单的未绑定服务)。在null
功能上返回onBind()
。只要附件存活,粘性服务就会附加到活动上并具有生命周期。使用前台服务时,您可能会有与您的应用程序相关的持续通知。