执行重新创建方法后未恢复的活动暂停

sea*_*end 11 android android-lifecycle

我有一个HoneyComb的项目,我在主Activity中的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)
Run Code Online (Sandbox Code Playgroud)

我创建了一个新项目来向您展示发生了什么.

您可以在http://xp-dev.com/svn/RecreateError/trunk/找到它.

我不知道我的错是什么,但我启动Activity并记录Activity的生命周期.结果:

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()
Run Code Online (Sandbox Code Playgroud)

现在我按动作栏图标激活重新创建标志并更改为其他应用程序...

11-10 22:30:26.390: I/seasons log(2274): onPause()
11-10 22:30:27.080: I/seasons log(2274): onStop()
Run Code Online (Sandbox Code Playgroud)

并返回我的Activity with recreate flag激活将在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()
Run Code Online (Sandbox Code Playgroud)

在onPause?但我的活动是可见的,我做错了什么?正确的状态不是onResume()?

现在,如果我换到另一个应用程序,我会收到错误.

谢谢你的时间,抱歉我的英语不好.


目前我不明白文件管理器HD等应用程序如何执行此操作.

两个活动:主要活动A,活动B,以PreferenceFragment为主要内容.

在Holo和Holo之间更改主题的一个选项.Light,Activity B OnSharedPreferenceChangeListener在PreferenceFragment中使用方法更改但是当我们回到Main Activity recreate()方法onResume()失败时,如何做到这一点?

我很困惑.抱歉.

har*_*ism 0

我不知道这是否是您问题的原因,但您不会在 Java 中像这样比较字符串;

protected void onResume() {
    ...
    if (recreate == "S") {
        recreate = "N";
        recreate();
    }
Run Code Online (Sandbox Code Playgroud)

if ("S".equals(recreate))代替使用。