How to make an android app return to the last open activity when relaunched?
Solution 1:
When launched via icon on the home screen, Android will always start the activity with the android.intent.action.MAIN
filter in your AndroidManifest.xml
, unless the application is already running (in which case it will obviously restore the activity on top of the stack).
To achieve what you described you can simply store the last visible activity in SharedPreferences
and have a Dispatcher activity that starts the last activity according to the preferences.
So in every activity you want to re-start automatically:
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
And a Dispatcher activity similar to the following:
public class Dispatcher extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Class<?> activityClass;
try {
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
activityClass = Class.forName(
prefs.getString("lastActivity", Activity1.class.getName()));
} catch(ClassNotFoundException ex) {
activityClass = Activity1.class;
}
startActivity(new Intent(this, activityClass));
}
}
Remarks
- You could create a base class for the
onPause
override - The Dispatcher activity obviously needs to be the
android.intent.action.MAIN
action
Solution 2:
It's not that complex. You just need to manipulate the manifest.
AndroidManifest.xm
<activity
android:name=".MainActivity"
android:alwaysRetainTaskState="true"
android:exported="true"
.
.
.
Read about the 'android:exported' & 'android:alwaysRetainTaskState' here:
android:exported
android:alwaysRetainTaskState