没有意图的onPause(),没有onCreate()的onResume()

时间:2019-06-15 15:55:10

标签: java android android-intent onpause

我正在构建一个带有服务并在后台播放音乐的应用程序。当用户不在应用程序中时,音乐将静音;当用户返回应用程序时,音乐将被静音。我使用了onPause()onResume()方法。

问题是-每次用户进入新活动时,音乐都会暂停一秒钟,然后继续播放,因为当前活动会暂停一秒钟。 另一个问题-对于活动的第一次运行,onResume()onCreate()都可以正常工作,这使我的服务从onResume()停止,甚至没有从onCreate()创建(这将导致应用关闭)。 有没有办法使用onPause()而没有意图部分(或另一种类似的方式?)

是否有一种方法可以在第一次运行时使用onCreate()而不使用onResume()

protected void onCreate(Bundle savedInstanceState) {
    counter++;

    if (counter==1) {
        alliesSPEditor.putBoolean("isAllies", true);
        alliesSPEditor.commit();
        startService(new Intent(this,MusicService.class));
    }

@Override
protected void onPause() {
    super.onPause();
    MusicService.getMP().mute();
}

@Override
protected void onResume() {
    super.onResume();
    if (counter!=1) //because the counter is still 1, the app won't shut down this way but it will not unmute the music.
    MusicService.getMP().unMute();

}

2 个答案:

答案 0 :(得分:0)

在活动开始运行之前,总是在onResume()之后调用

onCreate()

请参见https://developer.android.com/guide/components/activities/activity-lifecycle

答案 1 :(得分:0)

我看到一些解决方法:

  

问题是-每次用户进入新活动时,音乐都会暂停一秒钟,然后继续播放,因为当前活动暂停了一秒钟

首先是您在处理程序中设置一个标志,以开始新的活动,然后 在您的onPause()方法中检查de标志的值,如果为false,则不进行任何操作使音乐静音。

public static boolean openOtherActivity = false; 
@Override
protected void onPause() {
    super.onPause();

    if (!openOtherActivity) {
       MusicService.getMP().mute();
    }
}

如果您愿意,也可以使用首选项

要解决de onCreate()和onResume()问题,可以使用相同的逻辑 为启动的服务创建一个标志,并控制何时需要使用其他方法取消音乐静音

public static boolean isServiceCreated = false; // In your activity that start the service
protected void onCreate(Bundle savedInstanceState) {
    counter++;

    if (counter==1) {
        alliesSPEditor.putBoolean("isAllies", true);
        alliesSPEditor.commit();
        startService(new Intent(this,MusicService.class));
        isServiceCreated = true; // set the flag to true
    }
}

OnResume() method you can check if the service is started an create your logic