我目前正在尝试实施一个运行服务的应用,直到用户通过应用程序明确结束服务。我希望这项服务保持不变。我目前的问题是,每当从最近的应用程序中删除应用程序时,它也会终止该服务。我尝试在我的onStartCommand中使用START_STICKY,但它没有改变任何东西。
public class TriggerService extends Service{
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
这是我调用服务时的代码:
public void startServ(boolean state){
editor = sp.edit();
if (state == true) {
startService(new Intent(currentActivity, TriggerService.class));
editor.putBoolean("service_status", true);
toast = Toast.makeText(currentActivity, "Service Running", Toast.LENGTH_SHORT);
toast.show();
} else {
stopService(new Intent(currentActivity, TriggerService.class));
editor.putBoolean("service_status", false);
toast = Toast.makeText(currentActivity, "Service Not Running", Toast.LENGTH_SHORT);
toast.show();
}
editor.commit();
}
编辑:我添加了
android:isolatedProcess="true"
建议的服务的androidmanifest,但服务终止应用程序。
答案 0 :(得分:3)
当用户从最近的历史记录列表中滑动应用程序时,该过程终止。如果您在与活动相同的流程内启动服务,则当用户将应用程序刷出时,该服务将被终止。
该指南通过简单地在清单中设置一个标志来提及不同进程中的启动服务,但这将要求您使用AIDL在服务和应用程序之间移动数据或通过意图间接移动数据。
http://developer.android.com/guide/topics/manifest/service-element.html
<service android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:isolatedProcess=["true" | "false"]
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</service>
答案 1 :(得分:1)
发现问题。上面的代码将起作用。问题是4.4.2的代码中存在一个错误,当您终止这些应用程序时,它会终止与应用程序相关的服务。问题的一个示例是http://www.androidpolice.com/2014/03/07/bug-watch-stopping-apps-on-android-4-4-2-can-silently-kill-related-background-services-a-fix-is-on-the-way/,此处有错误跟踪器https://code.google.com/p/android/issues/detail?id=63793