2011-08-17 11 views
3

다음 흐름이 정상적인 지 알아야합니다. 활동 B 활동이 집중 되었기 때문에 onPause가 호출되었지만 몇 초 후 활동 B가 완료되고 onStop & onDestroy of Activity A가 호출되기 전에 Activity A (동일한 인스턴스) onResume이 호출됩니다. 매니페스트의 활동 A 디테일에서 noHistory = true를가집니다.noHistory = true인데도 활동으로 돌아 가기

noHistory = true 인 활동의 인스턴스는 활동이 포커스를 잃으면 결코 반환되지 않을 것이라고 생각했습니다.

+0

나는 그것이 (전체 활동 라이프 사이클) 죽게해야 할 것 같아요. 이벤트 A가 해고되기 위해서는 액티비티 A가 화면에서 완전히 숨겨져 있어야합니다. 네가 활동 B를 시작하기 전에 finish()를 호출하기를 원하지 않는다면. – Samuel

답변

5

ActivityA.onResume()이 (가) 호출되는 것으로 설명하는 동작이 올바르지 않습니다. AndroidManifest.xml 파일의 오타가 의심됩니다. 그것을 게시하고 우리에게 보여줄 수 있습니까?

onStop()onDestroy()의 타이밍은 조금 덜 정의됩니다. 다음은 작동하는 예제입니다. 그러나 onStop()onDestroy()은 사용자가 뒤로 버튼을 클릭 할 때까지 호출되지 않습니다 (단 onResume()는 호출되지 않습니다). ActivityB를 시작한 후 finish()으로 전화를하면 ActivityA가 먼저 호출됩니다. 마무리없이

OUTPUT()

D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:19:onCreate()] onCreate()[email protected] 
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:45:onStart()] onStart()[email protected] 
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:39:onResume()] onResume()[email protected] 
NEXT! 
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:51:onPause()] onPause()[email protected] 
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:16:onCreate()] onCreate() 
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:32:onStart()] onStart() 
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:26:onResume()] onResume() 
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:57:onStop()] onStop()[email protected] 
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:63:onDestroy()] onDestroy()[email protected] 
[BACK] 
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:38:onPause()] onPause() 
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:44:onStop()] onStop() 
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:50:onDestroy()] onDestroy() 

HelloAndroidActivity.java :

public class HelloAndroidActivity extends Activity { 
    private static final String TAG = "HelloAndroidActivity"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d(TAG, "onCreate()" + this); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent i = new Intent(HelloAndroidActivity.this, 
         GoodbyeAndroidActivity.class); 
       startActivity(i); 
       // Uncomment this: 
       finish(); 
      } 
     }); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Log.d(TAG, "onResume()" + this); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Log.d(TAG, "onStart()" + this); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     Log.d(TAG, "onPause()" + this); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Log.d(TAG, "onStop()" + this); 
    } 

    @Override 
    public void onDestroy() { 
     super.onStop(); 
     Log.d(TAG, "onDestroy()" + this); 
    } 

} 

GoodbyeAndroidActivity.java :

public class GoodbyeAndroidActivity extends Activity { 
    private static final String TAG = "GoodbyeAndroidActivity"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d(TAG, "onCreate()"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.goodbye); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Log.d(TAG, "onResume()"); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Log.d(TAG, "onStart()"); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     Log.d(TAG, "onPause()"); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Log.d(TAG, "onStop()"); 
    } 

    @Override 
    public void onDestroy() { 
     super.onStop(); 
     Log.d(TAG, "onDestroy()"); 
    } 
} 
마무리

D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:19:onCreate()] onCreate()[email protected] 
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:45:onStart()] onStart()[email protected] 
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:39:onResume()] onResume()[email protected] 
NEXT! 
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:51:onPause()] onPause()[email protected] 
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:16:onCreate()] onCreate() 
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:32:onStart()] onStart() 
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:26:onResume()] onResume() 
[BACK] 
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:38:onPause()] onPause() 
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:57:onStop()] onStop()[email protected] 
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:63:onDestroy()] onDestroy()[email protected] 
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:44:onStop()] onStop() 
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:50:onDestroy()] onDestroy() 

OUTPUT

main.xml에

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     > 
    <TextView 
     android:id="@+id/hello_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" 
     /> 
     <Button 
     android:id="@+id/button" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="NEXT!" 
     /> 
    </LinearLayout> 

goodbye.xml :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:id="@+id/hello_text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Goodbye!!!" 
    /> 
</LinearLayout> 

의 AndroidManifest.xml : @Sam 퀘스트 답을 가지고 같은

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example.hello" 
      android:versionCode="1" 
      android:versionName="1.0"> 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10"/> 

     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
      <activity android:name="com.example.hello.HelloAndroidActivity" 
         android:label="@string/app_name" android:noHistory="true"> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 
      <activity android:name="com.example.hello.GoodbyeAndroidActivity"> 
      </activity> 

     </application> 
    </manifest> 
+0

응답 해 주셔서 감사합니다. 활동이 정의되는 방식입니다 : galbarm

+0

Activity를 확장하고 LoginActivity가 파생되는 BaseActivity 클래스가 있습니다. 기본 클래스에서 나는 코드에서했던 것처럼 로그에 인쇄물을 보낸다. 그래서 다른 액티비티를보고 난 후에 LoginActivity.onResume으로 돌아 간다. – galbarm

+0

매우 이상합니다.내 응용 프로그램에 특성을 복사하여 붙여 넣었으므로 제대로 작동했습니다. 마음에 드는 질문 : minSdkVersion 및 targetSdkVersion은 무엇입니까? 이 장치를 여러 장치에서 재생할 수 있었습니까? 당신의 환경에서 내가 여기 게시 한 예제를 얻을 수 있습니까? – Jason

0

그것은 소리. 새로운 활동을 시작하기 전에 onFinish()를 호출하십시오. 사용자 탐색으로 인해 문제가 발생하면 활동이 완료되어야하지만 언제 보증되는지 알 수 없습니다. LoginActivity가 활동을 작성한 경우 onFinish()를 호출하면 해결 방법이 아닌 옳은 일을하게됩니다.

+0

"활동을 활동 스택에서 제거하고 사용자가 멀리 이동하여 더 이상 화면에 표시되지 않을 때 완료 됨 (finish() 메소드가 호출 됨) 여부. 이것은 내가 보는 행동이 아닙니다. 이 경우 예상대로 작동하지 않는 이유를 이해하는 것이 중요합니다. 내가 시도하는 방식입니다. 다른 방법을 찾아서는 안됩니다. – galbarm

1

활동 결과에 사용. 그러면 문제가 해결 될 것입니다.

+0

내 의견을 Edwin Evans에게 보냅니다. – galbarm