Android:通过清除最近的应用程序来防止Activity被破坏



我有一个问题。我使用MediaPlayer类来启动歌曲,问题是当应用程序关闭时,歌曲播放也停止了。

我搜索了网络,发现我可以覆盖背按方法将任务移动到后台,它对我来说很好,但是,当我从最近的应用程序中删除应用程序(通过滑动最近的应用程序或清除最近的应用程序)时,歌曲播放停止。

那么有什么方法可以防止这种情况发生吗?

我的代码是这样的:

主要活动:

    oncreate()
    {
        //
        public static MediaPlayer mp;
        startsong();
    }
    void startsong()
    {
        mp = MediaPlayer.create(....);
        mp.start();
        Intent intent = new Intent(this,Service.class);
        startService(inent);
    }
    onBackPressed()
    {
        moveTaskToBack(true);
    }

服务类别:

onStartCommand()
{
    Main.mp.setOnCompletitionListener( ... new oncomp ...)
    {
        Main.mp.stop();
        Main.mp.release();
    }
}

编辑:我找到了答案,答案是在前台设置通知服务

警告:服务运行在其托管进程的主线程中——服务不创建自己的线程,也不运行在单独的进程中(除非您另有指定)。来自:服务

你的服务很可能绑定到Activity,并随着Activity一起死亡。查看Android文档中的创建后台服务,以了解如何使其不这样做。

如果进程被终止,您可以重新启动服务,您必须重写public void onTaskRemoved()

例子
@Override
public void onTaskRemoved(Intent rootIntent){
    Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
    restartServiceIntent.setPackage(getPackageName());
    PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
    AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    alarmService.set(
    AlarmManager.ELAPSED_REALTIME,
    SystemClock.elapsedRealtime() + 1000,
    restartServicePendingIntent);
    super.onTaskRemoved(rootIntent);
 }

或者您可以在onStartCommand()中返回START_STICKY,这将在服务被终止时重新启动服务。

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

源:在应用程序从应用程序托盘中移除后,服务进程被杀死

不要试图让你的活动在关闭后保持活跃,你不会成功的,这是一个黑客。你想要的是保持你的服务前台,它应该防止你的应用程序进程被杀死。你应该这样设计你的活动,MediaPlayer将不会停止一旦活动被关闭和销毁。

更多信息请看这里:使用MediaPlayer服务

还有一部分是关于使服务前台:作为前台服务运行

[编辑]

我可能误解了你的问题,如果问题是服务在清除最近的列表后被杀死,那么看看这个SO: Android -服务在从最近的应用程序中滑动应用程序时停止,它的解决方案是使用alarmmanager,它会在任务被杀死后重新启动你的服务

相关内容

最新更新