2016-08-22 1 views
0

MainActivity in meiner App launchMode ist auf singleTask eingestellt. Wenn ich starte ActivityB von MainActivity, dann App in den Hintergrund und starten Sie meine Anwendung von Anwendungen Bildschirm wird nicht korrekt fortgesetzt. ActivityB wird automatisch beendet und MainActivity wird fortgesetzt. Ich erwarte, dass ActivityB stattdessen fortgesetzt wird. Warum passiert das und was kann ich tun, damit es normal funktioniert? Es funktioniert OK ohne Flagge, aber ich brauche diese Flagge für andere Zwecke.App fährt mit falscher Aktivität fort, wenn das Flag singleTask verwendet wird

Übrigens, meine App wird korrekt von der letzten apps Bildschirm fortgesetzt.

+0

Sind Sie sicher, dass Sie finish() nicht in onPause()/onResume() - Methode in ActivityB aufrufen? –

Antwort

0

Verwenden Sie den folgenden Code in den LAUNCHER-Aktivitäten.

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

if (!isTaskRoot()) { 
    finish(); 
    return; 
} 

// Rest of your onCreate code goes here 
} 
0

Aktivität B geschlossen ist, weil es von Aktivität A gestartet, dann ist dies ein normales Verhalten für Android, weil Aktivität A neu gestartet werden muss (singleTask) und alle damit verbundenen Instanz wird töten/Ziel.

Also, was Sie tun können, implementieren Sie shared-preference.

Ihre Aktivität A so sein sollte:

public class MainActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //// read share preference 
    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
    int defaultValue = getResources().getInteger("MYSHARE_PRFERENCE"); 
    int isOpened = sharedPref.getInt("IS_ACTIVITY_B_ALREADY_OPENED", defaultValue); 

    if (isOpened == 1) 
    { 
     //resume activity B 
     startActivity(new Intent(MainActivity.this, ActivityB.class)); 
    }  
    //// 

    findViewById(R.id.text).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      startActivity(new Intent(MainActivity.this, ActivityB.class)); 

      //// write on share preference 
      SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = sharedPref.edit(); 
      editor.putInt("IS_ACTIVITY_B_ALREADY_OPENED", 1); 
      editor.commit(); 
      //// 
     } 
    }); 
} 

}

P. S: Ich habe es noch nicht kompilieren, könnte der Code-Fehler auf der Kompilierung sein. Aber Share Preference kann eine Lösung für Ihr Problem sein.

+0

Vielen Dank für Ihre Unterstützung, aber das Starten von ActivityB von MainActivity wird nicht fortgesetzt. Der Aktivitätsstatus ist verloren. Offensichtlich hat dieses Problem keine Lösung. Diese Frage wurde bereits hier http://stackoverflow.com/questions/2417468/android-bug-in-launchmode-singletask-activity-stack-not-preserved gestellt – Egis

Verwandte Themen