Невозможно запустить другое действие из вида запуска
Я застрял с интересной проблемой: у меня есть активность типа запуска с Theme.NoDisplay
(без пользовательского интерфейса), который должен запускать различные действия в зависимости от некоторых условий, и хотя я звоню startActivity()
, он не запустит ни одного из них, если приложение было запущено с помощью значка запуска LauncherActivity
но потом умирает без ошибок / исключений).
ТЕМ НЕ МЕНИЕ
Если я начинаю LauncherActivity
через АБР или добавить задержку в startActivity()
кажется, работает просто отлично.
Вот фрагмент кода.
public class LauncherActivity extends Activity {
private Handler handler = new Handler();
private SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
preferences = getSharedPreferences(App.getContext().getString(R.string.preferences_name), MODE_PRIVATE);
int pesel = preferences.getInt(App.getContext().getString(R.string.pref_pesel), 0);
String password = preferences.getString(App.getContext().getString(R.string.pref_password), "");
Intent intent;
if (pesel != 0 && !password.isEmpty()) {
// TODO: server-side password check
intent = new Intent(this, MainActivity.class);
} else {
intent = new Intent(this, RegisterActivity.class);
}
Intent startIntent = getIntent();
intent.setAction(startIntent.getAction());
intent.setFlags(startIntent.getFlags());
if (startIntent.getExtras() != null)
intent.putExtras(startIntent.getExtras());
final Intent readyIntent = intent;
/*
THIS DOENS"T WORK (WORKS IF STARTED VIA ADB THOUGH)
*/
startActivity(readyIntent);
/*
THIS HOWEVER DOES WORK (ALWAYS)
*/
handler.postDelayed(new Runnable() {
@Override
public void run() {
startActivity(readyIntent);
}
}, 5000);
finish();
}
}
1 ответ
Я на самом деле нашел решение сам.
Я следил за этим сообщением в блоге, объясняющем, почему мы должны звонить finish()
до onResume()
из Theme.NoDisplay
Мероприятия.
Чтобы исправить мою проблему, я сделал что-то вроде этого, и это похоже на работу:
@Override
protected void onDestroy() {
super.onDestroy();
if (isFinishing() && intent != null) {
startActivity(intent);
}
}
К сожалению, у меня нет четкого объяснения, почему, но я все равно оставлю это здесь, может кому-то помочь.