Это действительно «добавление оскорбления к травме» - сначала Android убивает мое замечательное приложение, а затем, когда пользователь перезагружает мое приложение, Android пытается «помочь», запустив неправильную активность, вызывая сбой моего приложения. Вздох.
Вот мой очень хитрый обходной путь, чтобы противостоять полезности Android. Мое приложение требует, чтобы StartActivity была первой операцией, поэтому для всех других операций я добавляю одну строку в метод onCreate (). Например:
public class HelpActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (StaticMethods.switchToStartActivityIfNecessary(this)) return; // <- this is the magic line
...
}
...
}
Чтобы сделать это, я добавил переменную switch в свой класс Application:
public class OutBackClientApplication extends Application {
...
// Switch to indicate if StartActivity has been started.
// Values: -1 = StartActity has never been started or this is first invocation.
// 0 = normal situation, StartActivity has been run at least once.
private int _startActivityStatus = -1;
public int getStartActivityStatus() { return _startActivityStatus; }
public void setStartActivityStatus(int startActivityStatus) {
_startActivityStatus = startActivityStatus;
}
...
}
И у меня есть класс с именем StaticMethods, который включает в себя следующий метод:
public class StaticMethods {
/**
* Method to test for the problematic situation where Android has previously killed this app, and
* then when the user restarts the app Android tries to be helpful by restarting the activity
* that was in the foreground when it killed the app, instead of starting the activity specified
* in the manifest as the launch activity. See here:
* /7276315/android-inogda-nachinaetsya-nepravilnaya-aktivnost
*
* The following line should be added to the onCreate() method of every Activity, except for
* StartActivity, of course:
*
* if (StaticMethods.switchToStartActivityIfNecessary(this)) return;
*/
public static boolean switchToStartActivityIfNecessary(Activity currentActivity) {
OutBackClientApplication outBackClientApplication =
(OutBackClientApplication) currentActivity.getApplication();
if (outBackClientApplication.getStartActivityStatus() == -1) {
currentActivity.startActivity(new Intent(currentActivity, StartActivity.class));
currentActivity.finish();
return true;
}
return false;
}
}
Наконец, при запуске StartActivity необходимо сбросить переключатель:
public class StartActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((OutBackClientApplication) getApplication()).setStartActivityStatus(0);
...
}
...
}
Все это только для того, чтобы противостоять "полезности" Android ...