【问题标题】:Keeping a service persistent by calling startService from the onDestoy method通过从 onDestoy 方法调用 startService 来保持服务的持久性
【发布时间】: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 不管怎样...我建议你改变你的设计,即在你的应用程序中使用广播接收器来监听通话状态的变化,当通话状态改变时,你的应用程序会捕捉到广播然后您可以在通话期间/通话后做任何事情

标签: android android-service


【解决方案1】:

A service running all the time == fast battery drainage无论如何...我建议你改变你的设计,即在你的应用程序中使用BroadcastReceiver来监听通话状态的变化,当通话状态改变时你的应用程序会捕捉到广播然后你可以做任何事情通话期间/通话后。

然后您可以从广播接收器启动一个服务。它应该执行您需要的任务,例如,呼叫状态更改、广播被触发、您的应用程序获取它,然后您检查呼叫状态是什么,如果它在呼叫中,然后启动您的服务..然后当呼叫断开时系统将触发另一个广播,您的应用程序将获取它然后您将再次检查呼叫状态,如果断开连接则停止服务。希望你能把我带到这里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多