2017-04-25 6 views
0

Ich stecke mit einem interessanten Problem fest: Ich habe eine Launcher-ähnliche Aktivität mit Theme.NoDisplay (keine UI), die verschiedene Aktivitäten abhängig von einigen Bedingungen starten sollte und obwohl ich es bin startActivity() aufrufen, wird es keine von ihnen starten, wenn die App über Launcher-Symbol gestartet wurde (es startet LauncherActivity, aber dann stirbt ohne Fehler/Ausnahmen).Ich konnte keine andere Aktivität vom Launcher-Typ starten Aktivität

JEDOCH

Wenn ich LauncherActivity über ADB oder fügen Sie eine Verzögerung startActivity() Start scheint es ganz gut zu funktionieren.

Hier ist ein Code-Snippet.

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(); 
} 

}

+0

zeigen Sie uns Ihr Manifest? – t0mm13b

Antwort

0

Ich fand eine Lösung selbst.

Ich folgte this blog post erklärt, warum wir anrufen sollten finish() vor onResume() von Theme.NoDisplay Aktivitäten.

Zu meinem Problem zu beheben habe ich so etwas und es scheint zu funktionieren:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (isFinishing() && intent != null) { 
     startActivity(intent); 
    } 
} 

Leider habe ich keine klare Erklärung, warum, aber ich werde es lassen sich hier sowieso, könnte jemand helfen.

Verwandte Themen