执行再创作方法后未恢复的活动暂停

我有一个用于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) 

我创build了一个新项目来向你展示发生了什么。

你可以在http://xp-dev.com/svn/RecreateError/trunk/find它

我不知道我的错是什么,但是我开始Activity并loggingActivity的生命周期。 结果:

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

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

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

并返回到我的活动与重新启动标志激活什么会做onResume()重build()。

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

而现在,如果我改变到另一个应用程序,我得到的错误。

谢谢你的时间,并为我的坏英语感到抱歉。


在这个时候,我不明白应用程序如文件pipe理器高清做这个动作。

两项活动:主要活动A,活动B和PreferenceFragment作为主要内容。

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

我很困惑。 抱歉。

Solutions Collecting From Web of "执行再创作方法后未恢复的活动暂停"

为此,请使用处理程序:

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

这不会再崩溃了。

我不知道这是不是你的问题的原因,但你不要比较像Java这样的string;

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

使用if ("S".equals(recreate))

你永远不应该自己调用onPause onCreate onResume等。 你不应该需要使用recreate()来做你想做的事情,如果需要更新的话,可以在别处放置初始化代码。 此外,使用一个整数来stored procedures的状态而不是一个string,然后声明一些最终的variables来引用例如

 public final int RECREATE_ON = 1; public final int RECREATE_OFF = 2; private int recreate = RECREATE_OFF; ... if(recreate==RECREATE_ON){ recreate(); } 

记住重做()正在做什么:

导致使用新实例重新创build此活动。 这会导致与由于configuration更改而创buildActivity时的stream程基本相同 – 当前实例将经历其生命周期到onDestroy() ,然后创build一个新的实例。

这就是为什么你得到onPause消息。