【发布时间】:2016-01-07 02:17:13
【问题描述】:
我有一项服务正在执行一些后台工作,只要我的应用程序中的某些特定条件发生变化,该服务就应该继续运行。我使用了 START_STICKY 标志。
但是,如果需要资源,Android系统仍然会终止服务。
我想到了一个变通办法。我想从 onDestroy 方法调用 startService 方法(基于我的应用程序中满足的内部条件),以便当 android 服务终止此服务时,如果我的应用程序需要,它将重新启动。
这行得通吗?这对设备有任何危害吗?
【问题讨论】:
-
onDestroy()不能保证被调用,因此您打算在其中使用的任何逻辑都是不可靠的。如果您使用了START_STICKY标志,那么您的服务应该重新启动,而不是完全销毁。如果它没有重新启动,那么你可能在其他地方有问题。 -
你不应该一直关注如何让你的服务保持活跃,只要弄清楚你的服务为什么没有重启。如果你正在执行一些网络任务或繁重的操作,那么你应该使用像 asynctask 这样的多线程。
-
由于服务没有用户界面,这意味着没有方向更改问题,是的,您可以使用 Asynctask。 Asynctask 在 Activity 或 Fragments 中使用时有限制。
-
方向改变不会影响服务,所以不需要那个标志
-
A service running all the time == fast battery drainage不管怎样...我建议你改变你的设计,即在你的应用程序中使用广播接收器来监听通话状态的变化,当通话状态改变时,你的应用程序会捕捉到广播然后您可以在通话期间/通话后做任何事情