Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

App completely restarting when launched by icon press in launcher

I'm in the process of trying to make a release build of my first android app to send to a few testers. However, I ran into a problem with it. When you exit the app and then re-enter it by launching it via its icon, it restarts the whole app instead of returning to it's previous location. This occurs even if you re-enter right after exiting. However, it does not happen if I hold the Home button and launch it through the recent apps list.

I've searched online for others having this problem and there are a few, but no one has ever had a solid answer as to why it's happening to them. It's been suggested in old questions to set the launchmode to singletask or singleinstance in the manifest file, but that hasn't helped me, and besides - from what I understand, the default behavior for android is to return to the previous state of the task in this situation, so I don't know why I would need special manifest options to make it do that.

The most bizarre thing about this problem is that if I use eclipse and the debugger to put the app on my phone, this problem does not occur. I don't even need to be connected to the debugger, it seems like as long as I have a debug version of the app, the problem doesn't occur. But if I use a release version (I create it using the Android Tools - Export Signed Application Package menu option in Eclipse), the problem happens. If anyone has any insight as to what is causing this, I'd love to hear your thoughts.

like image 500
LayfieldK Avatar asked Apr 20 '13 23:04

LayfieldK


4 Answers

I had the same problem with an application and I resolved this behavior adding flag "android:launchMode="singleTop"" instead of "android:launchMode="singleTask"" in the <activity> declaration of your AndroidManifest.xml file. Hope this will help somebody.

like image 119
sky Avatar answered Nov 16 '22 06:11

sky


So far I've found out that it's an issue based on how you install it in your real device, specifically:

  1. If you simply copy and paste the APK to your device's local storage and install it from the device, regardless of whether it's signed or unsigned or taken from bin folder, it shows this behavior, app restarts from menu icon.

If you install it using one of the following options, This issue does not appear:

  1. Go to sdk/tools/ using a terminal or command prompt then type

    adb install <FILE PATH OF .APK FILE>
    

    In Linux, type:

    ./adb install <FILE PATH OF .APK FILE>
    
  2. Simply run your project from Eclipse.

I would be pleased to know if there's any possible way to distribute correct APKs for beta testing. I already tried exporting a signed APK because when you copy and paste an APK and install it manually it shows the rogue behavior.

Update:

I found out a solution. Follow these two Steps:

  1. Set android:launchMode="singleTask" = true for all activities of your app in the AndroidMainifest.xml inside the activity tag.
  2. Put this code in your Launcher Activity's onCreate().

    if (!isTaskRoot())
    {
        final Intent intent = getIntent();
        final String intentAction = intent.getAction(); 
        if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
            finish();
            return;       
        }
    }
    

This behavior is a bug in Android. Not a special case.

like image 41
Jayant Arora Avatar answered Nov 16 '22 08:11

Jayant Arora


 // To prevent launching another instance of app on clicking app icon 
        if (!isTaskRoot()
                && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
                && getIntent().getAction() != null
                && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

            finish();
            return;
        }

write the above code in your launcher activity before calling setContentView. This will solve the problem

like image 10
Fathima km Avatar answered Nov 16 '22 08:11

Fathima km


You could use launchMode as singleTop to the Launcher Activity in AndroidManifest.xml

       <activity
        android:name="<YOUR_ACTIVITY>"
        android:label="@string/app_name"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
like image 8
vasanth Avatar answered Nov 16 '22 06:11

vasanth