2011-11-10 19 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()でrecreate()を実行します。

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のようなアプリケーションがこの動作を行う方法はわかりません。

2つのアクティビティー:メインアクティビティーA、アクティビティーB(PreferenceFragmentをメインとするコンテンツ)。

ホロとHolo.Light間のテーマを変更する一つのオプション、PreferenceFragmentでOnSharedPreferenceChangeListener方法で アクティビティBの変化が、我々はonResume()に戻って主な活動recreate()方法に来たときにこれを行う方法を、失敗しましたか?

私は混乱しています。ごめんなさい。

答えて

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を自分で呼び出しません。しかし、よかったです。私はPreferenceFragmentでholoとHolo.lightの間のテーマを変更し、変更を見るために戻るときにアクティビティを再作成する必要があるため、私のアプリでこれを使用します。 – seasonsend

+1

私はあなたが他人が必要とするものを決めるべきではないと思います。あなたが解決策を知らない場合は、単に答えないでください。 – Michael

3

は、ハンドラを使用しています。

+4

'super.onResume()'を呼ばないと、まだクラッシュすると思います。 – nicopico

関連する問題