首页 > 解决方案 > 即使通过多任务屏幕停止应用程序,有什么方法可以不停止服务吗?

问题描述

当应用程序关闭时,我的服务会停止。

代码已经提供。

我的服务代码是:

public class MusicService extends Service {

    MediaPlayer myPlayer;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();

        myPlayer = MediaPlayer.create(this, R.raw.nokiatune);
        myPlayer.setLooping(false); // Set looping
    }

    @Override
    public void onStart(Intent intent, int startid) {
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        myPlayer.start();
    }
    @Override
    public void onDestroy() {
        Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
        myPlayer.stop();
    }

}

我在android中开发了一个服务。它工作正常。唯一的事情是当应用程序通过多任务屏幕关闭时服务停止。即使通过多任务屏幕关闭应用程序,有什么方法可以不停止服务吗?

标签: android-service

解决方案


您可以尝试这里讨论的方法。基本上,您注册一个广播接收器,如果它被破坏,它会重新启动您的服务。在你的AndroidManifest.xml

<receiver
     android:name="yourpackagename.RestartServiceBroadcastReceiver"
     android:enabled="true"
     android:exported="true"
     android:label="RestartServiceWhenStopped">
</receiver

你的BroadcastReceiver

public class RestartServiceBroadcastReceiver extends BroadcastReceiver {
 @Override
    public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, MusicService.class));
    }
}

然后在您的 Service 上onDestroy,您发送一个广播,以便 BroadcastReceiver 可以重新启动您的服务。

@Override
    public void onDestroy() {
          Intent broadcastIntent = new Intent(this,RestartServiceBroadcastReceiver .class);
          sendBroadcast(broadcastIntent);
          myPlayer.stop();
    }

此外,您必须将您的逻辑移动onStart到您的服务onStartCommand并让它返回START_STICKY,如下所示:

@Override
public int onStartCommand() {
    myPlayer.start();
    return START_STICKY;
}

返回这个告诉Android不要终止你的服务——但是,不能保证Android会遵守这个并且仍然可以终止你的服务。

最后在启动Service的Activity中,需要确保在启动服务之前先检查服务是否已经存在,并在运行期间停止服务onDestroy,以便BroadcastReceiver重新启动服务。

警告:此方法不适用于 Android O,请参阅了解更多详细信息。


推荐阅读