如何在应用暂停或销毁时停止服务,但在切换到新活动时却不停止服务?

时间:2016-03-27 21:13:13

标签: android service android-mediaplayer onpause android-intentservice

目前我有一个kernel_param_unlock(THIS_MODULE)用于在应用程序打开时在后台播放声音文件:

Service

我的public class BackgroundSoundService extends Service { MediaPlayer player; public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate(); player = MediaPlayer.create(this, R.raw.sound); player.setLooping(true); player.setVolume(100, 100); } public int onStartCommand(Intent intent, int flags, int startId) { player.start(); return 1; } @Override public void onDestroy() { player.stop(); player.release(); } } 就像Service一样启动了MainActivity

BackgroundSoundService backgroundSoundService = new Intent(this, BackgroundSoundService.class);

我希望Service在应用程序打开时继续运行,但在应用程序最小化或销毁时停止。我认为最初的解决方案是覆盖onPauseonDestroy,并实现此行:

stopService(backgroundSoundService);

然而,当我切换到另一个Activity时,会触发onPause并停止Service。如果应用程序在前台打开但是在应用程序最小化或关闭时停止,我怎样才能确保Service继续运行?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用onBackPressed来发现何时最小化您的Android应用。

你可能有一个活动是后退的主要MainActivity将导致应用最小化。然后停止Service

顺便说一下,您应该使用 Singleton 来保留backgroundSoundService的参考

制作可以最小化应用的所有活动扩展此BaseActivity

public abstract class BaseActivity extends Activity {

    @Override
    public void onBackPressed() {
        //check if should be minimized...
        //if so stop the Service
    }

}
  

需要Home按钮的解决方案

这很棘手,因为没有Key事件来区分`Home pressed。

您可以在onPause中使用isFinishing方法。

当活动转到Background时,按主页

所以只需要一个布尔值来检查你是否调用了(使用Intent)其他Activity。

将您的onPause方法更新为:

@Override
public void onPause() {
    if(!isFinishing()){
        if(!calledOtherActivity){
            stopService(serviceRef);
        }
    }
}