使用START_STICKY时,stopSelft()会自动重启Android服务

时间:2015-03-23 04:53:30

标签: android service process

我有一个推送通知的服务,即使我的应用程序关闭或被杀死,也必须在后台运行通知(从最近的应用程序中刷掉,...)。我用这个:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

但我也有一个BroadcastReceiver,当设备断开网络连接时,它会在服务类中调用stopSelf()。此接收器仅在我使用return START_NOT_STICKY时起作用,否则服务将自动重启。

问题是:如何将stopSelf()return START_STICKY一起使用?调用stopSelf()时不得重新启动该服务,但主进程将被杀死。

感谢阅读。

//编辑:我试图在AndroidManifest.xml中使用一个单独的服务进程:

<service android:name="com.mypackage.name.MyService"
    android:launchMode="singleTop"
    android:process=":myservice" />

并使用START_NOT_STICKY,但服务流程仍会与主流程一起被杀死。

1 个答案:

答案 0 :(得分:0)

问题1:

如何使用返回START_STICKY的stopSelf()? 您可以在接收器中收到广播时尝试,再次使用返回START_NOT_STICKY重新启动服务,然后调用stopSelf()。

问题2:

如果分配给此属性的名称以冒号(&#39;:&#39;)开头,则为应用程序专用的新进程。 如果进程名称以小写字符开头,则服务将在该名称的全局进程中运行,前提是它具有此权限。 所以我建议你更改名称android:process =&#34;你的自定义名称&#34;。