困惑的Android示例代码

时间:2013-09-17 18:30:39

标签: android

我正在查看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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

如果你的应用被暂停/杀死等,那么你通过onSaveInstanceState保存状态 savedInstanceState将包含您保存的应用程序的状态。否则它将为null。

答案 3 :(得分:0)

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