您好我正在尝试在后台运行一项服务,当应用程序被任务管理器销毁时它不会停止。服务的想法是验证每个" x"如果在服务器中有数据库中有新插入,则为min。
即使我关闭了应用程序,服务仍然运行良好,但是当我使用任务管理器销毁我的应用程序时,所有线程也都关闭了。
所以我想知道是否可以运行一个在后台永远询问的线程,除非用户在应用程序本身取消它,忽略任务管理器导致的破坏,以便将来我可以使用通知栏告诉用户在数据库中发生了新的插入。
尝试:
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
askServer(); // i made a timertask that ask every "x" minute
return START_STICKY;
}
当我读到START_STICKY应该再次运行该服务,如果它因某些原因被杀死,我知道这可以完成,因为一些应用程序被taskmanager关闭,仍然从whatsapp,bbms和其他人那里收到通知。如果我错了,请告诉我,谢谢你的阅读!
更新:我没有试图破坏Android的任何法律或安全规则,我不会试图忽略设置中应用程序的停止服务选项。我希望这个服务能够收听新来的"事件"在我的情况下,在用户使用按住home一段时间后出现的界面后继续运行:
更新:很抱歉与此应用程序进行了很多讨论,但我可以将其作为一个例子。在whatsapp中,当我通过我在上面显示的界面关闭应用程序时,进程和服务被杀死,但几秒后他们重新启动,这正是我想要做的事情,以便让用户了解数据库事件。从设置你仍然可以毫无问题地停止服务,甚至我可以将选项放在应用程序本身停止通知。
OnDestroy()方法中的一个错误的实现调用是一个服务的实例,所以它在destroy之后重新启动?
更新:在我关闭应用后,welp看起来我的服务仍然在后台运行。我将不得不处理我的服务设计,以免浪费电池寿命和资源。此外,我正在使用log.i()来检查服务是否正在运行,看起来当主进程关闭时,我无法使用日志或吐司通知(仍未实现),因为该服务正在运行刚赢了&#39 ; t显示在日志中。
UPDATE :现在正在使用startForeground(0,null)。在将来,我将发送一个通知,以显示数据库上的事件何时构建并调用startForeground(1,通知)。
答案 0 :(得分:2)
对于服务,请查看设置 - >应用程序 - >服务。并查看它是否正在运行。 但是,设计不良的服务可能会更频繁地运行或执行同步操作。所以是的,这是可能的。
答案 1 :(得分:0)
在开发我的第一款Android游戏时,我遇到了类似的问题;强制停止是杀死它的唯一方法。
当您将应用程序从任务管理器中滑出时, START_NOT_STICKY
将终止后台服务。顾名思义,START_STICKY
是“粘性的”,意思是即使应用程序消失,它也会粘在Android系统上。
无论如何,这都取决于我的经验。