2013-04-09 7 views
7

Предположим, у меня есть активность A, которая действует как корневая активность для моего приложения. и формируют эту деятельность я пойти к деятельности В.Android Начать деятельность без создания нового экземпляра

Я хочу, чтобы иметь возможность вернуться из B в A без создания нового экземпляра активность А.

этот код в активность B

public void onBackPressed() { 
     super.onBackPressed(); 
//  Intent intent= new Intent(getBaseContext(), MainActivity.class); 
//  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     Intent myIntent = new Intent(getBaseContext(), MainActivity.class); 
     myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(myIntent); 
     Log.d("Back", "TEST"); 
    } 

, но это порог вызывает onCreate по активности A. Что я хочу сделать, это иметь в фоновом режиме, когда активность б запускается и всякий раз, когда она будет закончена переключатель обратно деятельности

это проявляется

<activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" 
      android:screenOrientation="unspecified" 
      android:launchMode="singleTask" 
      android:stateNotNeeded="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.HOME"/> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:label="@string/app_name" 
      android:name=".SubmenuActivty" > 
     </activity> 
+0

Спасибо за тем, кто оценил эти вниз. Вы даже читали? –

ответ

0

Попробуйте

public void onBackPressed() { 
    super.onBackPressed(); 
    Log.d("Back", "TEST"); 
} 

И это все, что вам нужно.

2

Вам не нужно ничего делать. Просто удалите ваш метод onBackPressed() от деятельности В.

По умолчанию при переходе от Activity A на активность B, Android добавляет Activity A к backstack. Когда вы нажмете кнопку «Назад» от Activity B или закончите, он автоматически восстановит действие A из задней стопки.

Если вы хотите завершить свою деятельность B программным способом finish(), сделайте это.

+0

он восстановит Activity a из задней части, создав новый экземпляр этого. я хочу, чтобы активность A жила постоянно –

+0

do u finish Активность A, начиная работу B? Если не уверен, что действие А будет восстановлено до последнего состояния из-под стопки –

+0

, я не использую Intent myIntent = новый Intent (getBaseContext(), SubmenuActivty.class); startActivity (myIntent); для начала активности A –

0

Использование moveTaskToBack (true);

public void onBackPressed() { 
// TODO Auto-generated method stub 
moveTaskToBack(true); 
super.onBackPressed(); 
} 

или Вы можете также использовать отделку()

+0

это не сохраняет активность, это просто создаст новый экземпляр активности .. он снова вызовет метод oncreate –

11

По андроида активности жизненного цикла, когда вы запускаете деятельность A:

Life Список методов Цикл:

Activity A.onResume(); 
Activity A.onStart(); 
Activity A.onCreate(); 

Вид деятельности:

Activity A : Resumed 

При запуске активности B теперь:

Life список методов цикла:

Activity A.onStop(); 
Activity B.onResume(); 
Activity B.onStart(); 
Activity B.onCreate(); 
Activity A.onPause(); 
    ... 
    ... 
    ... 

активность Статус:

Activity A : Stopped 
    Activity B : Resumed 

И когда вы снова начать A сейчас:

Life Список методов Цикл:

Activity B.onDestroy(); 
Activity B.onStop(); 
Activity A.onResume(); 
    .... 
    .... 
    ....  

активность Статус:

Activity B : Destroyed 
    Activity A : Resumed 

Это жизненный цикл деятельности: enter image description here

Вы можете найти детали here

В соответствии с поведением по умолчанию активность A переходит в состояние onStop() и неактивна и нуждается в создании нового экземпляра при возврате к активности A. Все, что я знаю - нет способа сохранить экземпляр A.

+3

Когда A начинает B, A просто остановлен (но все еще ** жив **).Как только B закончится, он автоматически перезапустится и возобновит A. A будет живым, пока он не назовет 'finish()' сам по себе. –

3
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

Попробуй ... Это делает старую деятельность на фронт без нового экземпляра ...

Смежные вопросы