Android:避免在从其他活动返回时调用onCreate()

时间:2013-05-08 06:41:23

标签: android back oncreate

假设我的应用程序包含两个活动,A和B. 两者仅限于AndroidManifest中的肖像。

活动A开始活动B. 在活动B中,有一个按钮,单击时会调用finish()

问题是...... 当我垂直握住设备(纵向)并单击按钮时,调用顺序为

B.onStop();
B.onDestory();
A.onStart();

但是,当我水平握住设备(横向)时,序列变为

B.onStop();
B.onDestory();
A.onCreate();
A.onStart();

我不想要A.onCreate() !!!

我尝试按下Back按钮。 A.onCreate()未被调用。 所以...模拟Back按钮在某种程度上是解决方案

我尝试了以下内容,所有这些都称为A.onCreate() ..

finish();

onBackPressed()

dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));

EDITED

我不得不再说一遍。 这两项活动仅限于AndroidManifest中的肖像。 永远不会调用onConfigurationChanged

不接受静态变量。因为这会引起其他问题..

3 个答案:

答案 0 :(得分:2)

这是因为您在应用程序启动时的某个阶段更改了方向,即 在方向更改时,活动将被销毁然后重新创建。避免它处理方向。

通过在清单文件中的活动下添加以下行来自行处理方向更改。

<activity android:name=".Activity_name"
android:configChanges="orientation|keyboardHidden|screenSize"

答案 1 :(得分:0)

如果您希望在方向更改时不在onCreate中调用某些代码,则可以执行以下操作:

在您的活动中

覆盖onRetainLastNonConfigurationInstance()并将其返回Boolean.TRUE

onCreate支票Boolean.TRUE.equals(getLastNonConfigurationInstance())中,如果是,则表示您的onCreate已被调用,因为(并且仅因为)方向已更改。

答案 2 :(得分:0)

在您的情况下,设置

O(n)

可以避免Activity reCreate新实例,但是某些设备会导致黑屏并仍然会调用onCreate,如果要阻止这种情况,可以覆盖onConfigurationChanged()方法,并执行以下操作:

O(n)