1

我正在查看 android 开发人员网站上的一些代码,并对此处显示的示例有一个快速的问题 - http://developer.android.com/guide/components/fragments.html

特别是,我正在查看这段代码 -

public static class DetailsActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getResources().getConfiguration().orientation
            == Configuration.ORIENTATION_LANDSCAPE) {
        // If the screen is now in landscape mode, we can show the
        // dialog in-line with the list so we don't need this activity.
        finish();
        return;
    }

    if (savedInstanceState == null) {
        // During initial setup, plug in the details fragment.
        DetailsFragment details = new DetailsFragment();
        details.setArguments(getIntent().getExtras());
        getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
    }
}

第二个 if 语句的意义是什么 -

if (savedInstanceState == null) {

我找不到任何这种 if 语句不成立的情况。我通过添加 else 语句并在其中设置断点来测试此代码。无论我尝试如何,我都无法到达那个断点。那么,为什么还要打扰 if 语句呢?为什么不把它放在一起呢?

4

4 回答 4

1

在某些情况下,您的 Activity 会被 Android 操作系统停止。在这些情况下,您有机会通过调用 [onSaveInstanceState]( http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle ) . 如果在此之后,您的 Activity 再次启动,它将传递Bundle您创建的,以便您可以正确恢复状态。

于 2013-09-17T18:35:40.570 回答
1

您必须查看完整的示例代码。这部分是有道理的。

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

如果您第一次启动 Activity,Bundle savedInstanceState 将为 null,并且 if 语句的主体将被执行。如果调用了 onSaveInstanceState,因为您离开了 Activity,Bundle 不再为 null,并且 if 正文将不会被执行。

于 2013-09-17T18:38:09.373 回答
0

显然,这已添加到示例中,以便将来扩展此代码。虽然它现在完全没有任何功能,但如果此活动要启动另一个活动并在新活动具有焦点时被杀死,则此代码将在用户点击后退按钮时重建活动,而不是从头开始重建。

于 2013-09-18T20:39:31.780 回答
0

如果您的应用程序被暂停/终止等,并且您保存了状态,onSaveInstanceState那么 savedInstanceState 将包含您保存的应用程序的状态。否则它将为空。

于 2013-09-17T18:37:56.980 回答