目前我有一个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
在应用程序打开时继续运行,但在应用程序最小化或销毁时停止。我认为最初的解决方案是覆盖onPause
和onDestroy
,并实现此行:
stopService(backgroundSoundService);
然而,当我切换到另一个Activity
时,会触发onPause
并停止Service
。如果应用程序在前台打开但是在应用程序最小化或关闭时停止,我怎样才能确保Service
继续运行?
答案 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);
}
}
}