假设我的应用程序包含两个活动,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
。
不接受静态变量。因为这会引起其他问题..
答案 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)