我有一个推送通知的服务,即使我的应用程序关闭或被杀死,也必须在后台运行通知(从最近的应用程序中刷掉,...)。我用这个:
@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
,但服务流程仍会与主流程一起被杀死。
答案 0 :(得分:0)
问题1:
如何使用返回START_STICKY的stopSelf()? 您可以在接收器中收到广播时尝试,再次使用返回START_NOT_STICKY重新启动服务,然后调用stopSelf()。
问题2:
如果分配给此属性的名称以冒号(&#39;:&#39;)开头,则为应用程序专用的新进程。 如果进程名称以小写字符开头,则服务将在该名称的全局进程中运行,前提是它具有此权限。 所以我建议你更改名称android:process =&#34;你的自定义名称&#34;。