2010-05-13 7 views
0

뒤로 버튼을 누르면 onPause가 호출되고 앱은 다시 시작될 때까지 일시 중지 상태로 유지됩니다. 아이콘이 나타나면 onDestroy가 호출되고 주 활동이 계속 중단됩니다.ActivityGroup에서 뒤로 버튼을 누르면 일시 중지되고 다음에 앱이 시작될 때 계속 종료됩니다.

설명하기 쉬운 클래스. 내가 알 수있는 한이 이며 Nexus One에서만 발생합니다. 에뮬레이터 나 드로 이드에서 재현 할 수 없습니다.

I/ActivityManager( 132): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=com.vimtips.testshutdown/.MainActivity } 
I/ActivityManager( 132): Displayed activity com.vimtips.testshutdown/.MainActivity: 305 ms (total 305 ms) 
D/MainActivity(1393): onPause called 
I/ActivityManager( 132): Displayed activity com.vimtips.testshutdown/.MainActivity: 302 ms (total 302 ms) 
D/MainActivity(1393): Shutting down 

이 안드로이드의 소스 코드에서 찾고 있지만, 정상적인 활동에 그냥 작업 그룹을 일이 표시되지 않습니다, 나는 그 이유를 알아낼 수 없습니다 :

package com.vimtips.testshutdown; 

import android.app.ActivityGroup; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 

public class MainActivity extends ActivityGroup { 
    private static final String TAG = "MainActivity"; 
    private int counter = 3; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if(keyCode == KeyEvent.KEYCODE_BACK) { 

      if(counter-- > 0) return true; 
     } 

     return super.onKeyDown(keyCode, event); 
    } 

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

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

     if(isFinishing()) { 
      Log.d(TAG, "Shutting down"); 
     } 
    } 
} 

그리고 여기 로그입니다. 내 앱에 심각한 문제가 발생했습니다.

왜 이런 일이 일어날 지 알고 있습니다.

답변

1

이것은 앱의 launchMode 및 의도 플래그에 따라 다릅니다. 현재 에뮬레이터에서 모든 활동은 다음과 같은 플래그와 함께 시작됩니다 :

  • Intent.FLAG_ACTIVITY_NEW_TASK을

을 Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 그리고이 활동을 다시 시작합니다 지정된 플래그가없는 경우, 귀하의 사건에서 일어나는 일입니다.

+0

Nexus One이 주 활동 인 경우이 플래그를 추가/수정하려면 어떻게해야하나요? 나는 그 매니페스트 어딘가에서 추측합니까? 드로이드에서 무슨 일이 일어나고있는거야? – synic

+0

AndroidManifest의 모든 활동에 launchMode를 지정할 수 있습니다. singleTop을 launchMode로 사용해보십시오.이 메서드는 onResume을 호출하지 않고 해당 활동의 onNewIntent() 메서드를 호출합니다. Btw는 현재 onCreate() 및 onResume()에서 얻고있는 Intent 플래그를 확인할 수 있습니까? – Karan

+0

나는이 상황이 불가능한 것처럼 보이게하는 singleTask ..를 이미 통과하고있다. 누군가가 활동을 시작한 후 활동을 시작하면 이전 활동이 완료되기 전에 새 활동이 작성됩니다. 즉, 두 인스턴스가 실제로 잠시 동안 살아 있음을 의미합니다. 네가 가지고 있다면 Nexus One에서 단 하나의 활동으로 제공하고 singleTask로 설정 한 수업에서 직접 시험해보십시오. G1, Droid 또는 에뮬레이터에서는 발생하지 않습니다. – synic

관련 문제