App always starts fresh from root activity instead of resuming background state (Known Bug)

32,378

Solution 1

This is due to the intents being used to start the app being different. Eclipse starts an app using an intent with no action and no category. The Launcher starts an app using an intent with android.intent.action.MAIN action and android.intent.category.LAUNCHER category. The installer starts an app with the android.intent.action.MAIN action and no category.

Whoever submitted the bug should have probably worded it as a request for enhancement to the Eclipse plugin since they apparently want Eclipse to have the ability to pretend to be the launcher and to start apps using the same intent as the launcher.

Solution 2

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 
        // Activity was brought to front and not created, 
        // Thus finishing this will get us to the last viewed activity 
        finish(); 
        return; 
    } 

    // Regular activity creation code... 
} 

Solution 3

Here is the solution:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 & getIntent().getExtras() == null) {
        finish();
        return;
    }

 Your code....
}

EDIT: I had problems with new intents and notifications. The previous solution doesn't work with notifications and intents...

Solution 4

Just add this in onCreate method of your launcher activity like this:

      @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    if (!isTaskRoot()) {
        finish();
        return;
    }
    // other function
    }
Share:
32,378
Monstieur
Author by

Monstieur

Updated on July 31, 2020

Comments

  • Monstieur
    Monstieur almost 4 years

    I am facing exactly the problem mentioned in these links:

    http://code.google.com/p/android/issues/detail?id=2373

    http://groups.google.com/group/android-developers/browse_thread/thread/77aedf6c7daea2ae/da073056831fd8f3?#da073056831fd8f3

    http://groups.google.com/group/android-developers/browse_thread/thread/2d88391190be3303?tvc=2

    I have a simple root activity with the LAUNCHER and MAIN intents and nothing else. I start another activity with has no flags or anything extra in the manifest whatsoever.

    I launch the app (root activity) and from there start the 2nd activity. On pressing the Home button the task goes to the background. On launching the app again (from Launcher or from holding the Home button for recent apps) it starts a new instance of the root activity on top of the existing stack.

    If I press the back button, the new "root" activity closes and the old 2nd activity is visible, which means its launching the root activity in the same task instead of bring the task to the foreground.

    To counter this I made the root activity's launch Mode singleTask. Now when I press home and launch the app again, it clears the activities above the old root task and brings the old root task to the foreground instead of just bringing the entire old task with the 2nd activity on top to the front. Note that the old root task still retains its application state, which means it wasn't a new instance, but the the higher activities had been killed.

    It even occurs on other applications downloaded from the market. The manual install method has no effect for me, it still launches the same way.

  • Monstieur
    Monstieur about 14 years
    The problem however is this persists even when launching the application from the phone directly...
  • Vit Khudenko
    Vit Khudenko about 14 years
    Yes, Kurian is right - this is not just an Eclipse plugin issue. The same happens on device on OTA upgrade. This is the most weird Android issue I've faced with. Can't believe it's still a New issue being created 1 year ago!!!
  • source.rar
    source.rar almost 13 years
    Doesn't look like this has been resolved to date. Hmmm... wonder what the folks over there really do?
  • Ted
    Ted over 12 years
    Hmm, my tests show that Lance is correct. I get that my startupActivity.onCreate is executed every time I resume if I run it from Eclipse. But if I start from the device, I do not get the onCreate executed when resuming... Running 2.3.3 on Samsung S2.
  • Ted
    Ted over 12 years
    However, the second Activity (that is launched) won't show up on resume, then the damn StartupActivity is shown again... hmm
  • JohnyTex
    JohnyTex over 9 years
    What is this? How can it not be fixed?
  • JohnyTex
    JohnyTex over 9 years
    This is so retarded -not your solution, but the problem to begin with.
  • Micro
    Micro about 8 years
    Is this a bug or is this on purpose? - the way android set this up
  • Alexey Andronov
    Alexey Andronov about 7 years
    didn't work for me, so I changed android:launchMode="singleInstance" to android:launchMode="singleTask" and it worked :)
  • blackJack
    blackJack about 7 years
    @sfk92fksdf just want to say thank you for saving next days!
  • CDrosos
    CDrosos about 7 years
    @HimanshuDwivedi this is for a very old bug, you dont need that anymore
  • UserName_Untold
    UserName_Untold almost 7 years
    Thanks you saved my day :)
  • Hardik Mehta
    Hardik Mehta over 6 years
    @Lance Nanek and all members I am facing the same issue is there any workaround for that?
  • Bhuvaneshwaran Vellingiri
    Bhuvaneshwaran Vellingiri about 5 years
    Thanks it's woking.