2011-11-10 1 views
10

HoneyComb에 대한 프로젝트가 있으며 주 활동의 onResum() 메소드에서 recreate() 메소드를 사용한 후 오류가 발생합니다.재 작성 메소드 후 재개되지 않는 활동 일시 정지 수행

11-10 22:05:42.090: E/ActivityThread(1917): Performing pause of activity that is not  resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main} 
11-10 22:05:42.090: E/ActivityThread(1917): java.lang.RuntimeException: Performing pause of activity that is not resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main} 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2517) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2505) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2483) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.access$700(ActivityThread.java:122) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1031) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.os.Looper.loop(Looper.java:132) 
11-10 22:05:42.090: E/ActivityThread(1917):  at android.app.ActivityThread.main(ActivityThread.java:4123) 
11-10 22:05:42.090: E/ActivityThread(1917):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-10 22:05:42.090: E/ActivityThread(1917):  at java.lang.reflect.Method.invoke(Method.java:491) 
11-10 22:05:42.090: E/ActivityThread(1917):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-10 22:05:42.090: E/ActivityThread(1917):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-10 22:05:42.090: E/ActivityThread(1917):  at dalvik.system.NativeStart.main(Native Method) 

나는 어떤 일이 일어나는지 보여주기 위해 새 프로젝트를 만듭니다.

당신은 내가 내 잘못이야 모르는하지만 활동을 시작하고 활동의 라이프 사이클을 기록 http://xp-dev.com/svn/RecreateError/trunk/

에서 찾을 수 있습니다. 그 결과 지금

11-10 22:26:45.960: I/seasons log(2274): onCreate() 
11-10 22:26:45.990: I/seasons log(2274): onStart() 
11-10 22:26:45.990: I/seasons log(2274): onResume() 

내가

11-10 22:30:26.390: I/seasons log(2274): onPause() 
11-10 22:30:27.080: I/seasons log(2274): onStop() 

... 작업 표시 줄 아이콘이 재 작성 플래그를 활성화하고 다른 응용 프로그램에 변경을 누르면 완료됩니다 무엇을 활성화 재 작성 플래그 내 활동에 반환 onResume()에서 다시 작성()하십시오.

11-10 22:33:05.500: I/seasons log(2274): onCreate() 
11-10 22:33:05.510: I/seasons log(2274): onStart() 
11-10 22:33:05.510: I/seasons log(2274): onResume() 
11-10 22:33:05.510: I/seasons log(2274): onPause() 

onPause? 하지만 내 활동이 눈에 보이고, 내가 뭘 잘못하고 있니? 올바른 상태는 onResume()이 아닙니다.

이제 다른 앱으로 변경하면 오류가 발생합니다.

시간을 내 주셔서 감사 드리며 나쁜 영어로 유감스럽게 생각합니다.


현재 파일 관리자 HD와 같은 응용 프로그램이이 작업을 수행하는 방식을 이해하지 못합니다.

두 가지 활동 : 기본 활동 A, 기본 내용으로 PreferenceFragment가있는 활동 B. 홀로과 Holo.Light 사이에 테마를 변경

하나 개의 옵션하는 OnSharedPreferenceChangeListener PreferenceFragment의 방법 그러나 우리는 onResume() 실패의 주요 활동 recreate() 방법에 돌아올 때,이 어떻게 할 수와 활동 B 변경?

나는 혼란 스럽다. 죄송합니다.

답변

0

이것이 문제의 원인인지는 모르겠지만 Java에서 이처럼 Strings를 비교하지 마십시오.

protected void onResume() { 
    ... 
    if (recreate == "S") { 
     recreate = "N"; 
     recreate(); 
    } 

if ("S".equals(recreate))을 대신 사용하십시오.

+0

업. 실제 응용 프로그램에서는이 코드가 존재하지 않지만 감사합니다. 나를 위해 큰 실수. – seasonsend

0

고객님이 직접 onPause onCreate onResume 등으로 전화하지 마십시오. 원하는 부분에 recreate()을 사용할 필요가 없습니다. 초기화가 필요한 경우 초기화 코드를 다른 곳에 넣으십시오. 또한 문자열 대신 프로그램의 상태를 저장하기 위해 정수를 사용하고 예를 들어 참조 할 최종 변수를 선언하십시오.

public final int RECREATE_ON = 1; 
public final int RECREATE_OFF = 2; 
private int recreate = RECREATE_OFF; 

... 

if(recreate==RECREATE_ON){ 
    recreate(); 
} 

하고있다) (무엇을 재 작성을 기억

원인이 활동은 새로운 인스턴스로 재 작성 할 수 있습니다.결과적으로 구성 변경으로 인해 활동이 생성 될 때와 동일한 흐름으로 이 발생합니다. 현재 인스턴스는 라이프 사이클을 거쳐 onDestroy()으로 이동 한 후 새 인스턴스가 생성됩니다.

여기에 메시지가 표시됩니다.

Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      if(msg.what==MSG_RECREATE) 
       recreate(); 
     } 
}; 

@Override 
protected void onResume() { 
    if(condition) { 
     Message msg = handler.obtainMessage(); 
     msg.what = MSG_RECREATE; 
     handler.sendMessage(msg); 
    } 
} 

이 더 이상 충돌하지 않습니다 이렇게하려면

+1

나는 스스로 onPause, onCreate, onResume을 호출하지 않는다. 그러나 yoy는 재현하는 것이 옳습니다. PreferenceFragment에서 holo와 Holo.light 사이의 테마를 변경하고 변경 사항을보기 위해 다시 돌아올 때 활동을 다시 작성해야하기 때문에 앱에서이 값을 사용합니다. – seasonsend

+1

다른 사람들이 필요로하는 것을 결정해서는 안된다고 생각합니다. 해결책을 모르는 경우에는 대답하지 마십시오. – Michael

3

는 핸들러를 사용합니다.

+4

'super.onResume()'을 호출하지 않으면 여전히 충돌 할 것이라고 나는 믿는다. :) – nicopico