11

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()

そして、recreateフラグをアクティブにしてアクティビティに戻り、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つのアクティビティ:メインコンテンツとしてPreferenceFragmentを使用したメインアクティビティA、アクティビティB。

HoloとHolo.Lightの間でテーマを変更する1つのオプション、アクティビティBはPreferenceFragmentのメソッドで変更されますが、失敗時にメインアクティビティメソッドにOnSharedPreferenceChangeListener戻った場合、これを行うにはどうすればよいですか?recreate()onResume()

混乱しています。ごめん。

4

3 に答える 3

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();
}

recreate() が何をしているのか覚えておいてください:

このアクティビティを新しいインスタンスで再作成します。これにより、構成の変更によりアクティビティが作成されたときと基本的に同じフローになります。現在のインスタンスはそのライフサイクルを経て onDestroy()になり、その後に新しいインスタンスが作成されます。

これがonPauseメッセージを受け取っている理由です。

于 2011-11-10T21:59:37.087 に答える
0

これが問題の原因かどうかはわかりませんが、Java でこのような文字列を比較していません。

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

if ("S".equals(recreate))代わりに使用してください。

于 2011-11-10T21:45:23.610 に答える