Roni Berkovich
Roni Berkovich

Reputation: 1

onPause() without intent , onResume() without onCreate()

I'm building an app that plays music on the background with service. The music is muted when the user is not in the app and unmuted when he is back. I used the onPause() and onResume() methods to do this.

The problem is - every time the user enters a new activity, the music pauses for a second and then resumes, because for a second the current activity is paused. another problem - for the first run of the activity, the onResume() and onCreate() both works, which makes my service stops from the onResume() without it even being created from the onCreate() (which makes the app shut down). is there a way to use onPause() without the intent part (or another similar way?)

is there a way to use onCreate() without to onResume() on the first run?

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();

}

Upvotes: 0

Views: 63

Answers (2)

Jonathas Nascimento
Jonathas Nascimento

Reputation: 290

I see some ways to solve this:

the problem is - every time the user enters a new activity, the music pauses for a second and then resumes, because for a second the current activity is paused

The first is you set a flag in the handler that start your new activity and check in your onPause() method the value of de flag, if false, do nothing othewise mute de music.

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

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

You can use Preferences too if you preferrer

To resolve de onCreate() and onResume() problem, you can use the same logic creates a flag for the services started and control when you needs unmute the music in anothers methods

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

Upvotes: 0

levis501
levis501

Reputation: 4207

onResume() is always called after onCreate() before the activity starts running

See https://developer.android.com/guide/components/activities/activity-lifecycle

Upvotes: 0

Related Questions