Android 如何在应用程序暂停或销毁时停止服务,而不是在它切换到新活动时停止服务?
目前我有一个Android 如何在应用程序暂停或销毁时停止服务,而不是在它切换到新活动时停止服务?,android,service,android-mediaplayer,onpause,android-intentservice,Android,Service,Android Mediaplayer,Onpause,Android Intentservice,目前我有一个服务,我正在使用它在应用程序打开时在后台播放声音文件: public class BackgroundSoundService extends Service { MediaPlayer player; public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate()
服务
,我正在使用它在应用程序打开时在后台播放声音文件:
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();
}
}
而服务
在mymain活动中启动,如下所示:
BackgroundSoundService backgroundSoundService = new Intent(this, BackgroundSoundService.class);
我希望服务
在应用程序打开时继续运行,但在应用程序最小化或销毁时停止运行。我认为解决这一问题的最初方法是覆盖onPause
和onDestroy
,并实现这一行:
stopService(backgroundSoundService);
但是,当我随后切换到另一个活动
,则会触发暂停
,并停止服务。我如何确保只要应用程序在前台打开,服务
就会继续运行,但当应用程序最小化或关闭时就会停止?您可以尝试使用onBackPressed
来发现您的安卓应用程序何时将被最小化
您可能有一个活动是主main活动
,在上按下该活动将导致应用程序最小化。然后停止服务
顺便说一句,您应该使用单例,以便为您的backgroundSoundService
让所有可以最小化应用程序的活动扩展此BaseActivity
public abstract class BaseActivity extends Activity {
@Override
public void onBackPressed() {
//check if should be minimized...
//if so stop the Service
}
}
需要一个主页按钮的解决方案吗
这很棘手,因为没有按键事件来区分“Home pressed”
您可以使用onPause
中的方法
当活动进入后台时
按主页键时,活动将不完成
因此,只需使用布尔值检查您是否调用了(使用Intent
)其他活动
将您的onPause
方法更新为:
@Override
public void onPause() {
if(!isFinishing()){
if(!calledOtherActivity){
stopService(serviceRef);
}
}
}
这是个好主意。但是,这并不包括我按下Home
按钮,我还必须在每个活动中覆盖onBackPressed
,以获得所需的结果。你应该只覆盖onBackPressed
可以最小化应用程序的活动。如果您有几个这样的活动,那么我已经更新了此场景的答案。。