我退出应用程序时服务停止

时间:2018-07-18 07:15:25

标签: android android-service

我有一个带有服务的应用程序。服务是在create方法的主要活动中由应用启动的。我退出应用程序时出现问题:服务停止

清单文件

<application
    android:name=".App"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:isolatedProcess="true"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".DialActivity">
    </activity>
    <service
        android:name=".ButtDial.CallDetectService"
        android:enabled="true"
        android:exported="true" />

    <activity android:name=".Utils.IncomingCallActivity" />
    <activity android:name=".Utils.OutGoingCallActivity"></activity>
    <receiver
        android:name=".ButtDial.CallHelper$OutgoingReceiver"
        android:enabled="true"
        android:exported="true"
        android:label="RestartServiceWhenStopped">

    </receiver>
</application>

我不知道当应用退出时如何启动我的服务 服务

public class CallDetectService extends Service {
private CallHelper callHelper;

public CallDetectService() {
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    callHelper = new CallHelper(this);

    int res = super.onStartCommand(intent, flags, startId);
    callHelper.start();
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();

    callHelper.stop();
}
@Override
public IBinder onBind(Intent intent) {
    // not supporting binding
    return null;}
public class MyBinder extends Binder {
    public CallDetectService getService() {
        return CallDetectService.this;
    }
}}

活动中

请帮助我解决这个问题

Intent intent = new Intent(getBaseContext(), CallDetectService.class);
startService(intent);

2 个答案:

答案 0 :(得分:0)

您可以在清单中将android:stopWithTask="false"用作波纹管,这意味着,即使用户通过从tasklist中删除应用而杀死了该应用,您的service也不会停止。

 <service
   android:name="CallDetectService "
   android:stopWithTask="false"
   android:isolatedProcess="true"/>

更多内容请看this. 希望对您有帮助!

答案 1 :(得分:0)

即使您设法找到在Android N上执行的方法,该方法也不适用于对后台服务施加了一些限制的AndroidO。您将无法自由运行或启动服务。当应用进入后台时,服务将停止,就像调用stopSelf()一样。

如果对确保服务运行到完成(即使应用已关闭)至关重要,那么您可以创建ForegroundService。这种方法也可以在Android O上使用。有关实现的详细信息,您可以按照我在SO上的回答进行操作。