2

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

Activity A启动了Activity B。在Activity 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));

已编辑

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

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

4

3 回答 3

2

发生这种情况是因为您在应用程序启动时的某个阶段更改了方向,imo。
在方向改变时,活动被破坏然后重新创建。为了避免它处理方向。

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

<activity android:name=".Activity_name"
android:configChanges="orientation|keyboardHidden|screenSize"
于 2013-05-08T07:03:08.620 回答
0

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

在您的活动中覆盖onRetainLastNonConfigurationInstance()并使其返回Boolean.TRUE

在您的onCreate检查Boolean.TRUE.equals(getLastNonConfigurationInstance())中,如果是,这意味着您的 onCreate 已被调用,因为(并且仅在此情况下)方向已更改。

于 2013-05-08T07:16:35.780 回答
0

在你的条件下,设置

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

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

@Override
protected void onConfigurationChanged(Configuration newConfig) {
    newConfig.orientation = Configuration.ORIENTATION_PORTRAIT;
    super.onConfigurationChanged(newConfig);
}
于 2016-10-14T03:42:34.240 回答