如果用户未明确对其进行修改,则saveInstanceState将始终为null吗?

时间:2018-08-03 15:32:52

标签: java android

根据Android开发者页面:

  

因为无论系统是否正在创建,都会调用onCreate()方法   您的活动的新实例或重新创建的活动实例,您必须   在尝试读取状态捆绑包之前,请检查其状态是否为null。   如果为null,则系统正在创建的新实例。   活动,而不是还原先前被破坏的活动。   Source

据我了解,这意味着if(savedInstanceState == null)中的条件onCreate()仅在Activity的第一个实例上运行;如果用户在应用程序之间切换或更改方向,则系统将调用onCreate(),以上条件将返回false,并且内部代码将不执行,如以下代码所示。

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

    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState == null) {
        // Code here will run only on the *first* time onCreate() is called
    } 

    // Code here will run every time onCreate() is called
}

但是,如果用户从未明确saveInstanceState对象的修改,上述代码将按预期工作吗?

从以上引用来看,方向的改变似乎会以某种方式修改saveInstanceState,使上述条件返回true

我一直在研究该主题,但没有找到有关系统如何在后台修改savedInstanceState的相关信息(或者是否正在这样做)。

所以问题是:如果用户未明确修改savedInstanceState,那么null会一直是chrome.webRequest.onBeforeRequest.addListener( function(details) { var currentTab = null; // this is callback and async chrome.tabs.query( {highlighted: true}, function(tab){ currentTab = tab[0].url; } ) // this is not working, currentTab won't be set before used here. if(details.url == currentTab){ return {cancel: false}; }else{ return {cancel: true}; } } ) 吗?

1 个答案:

答案 0 :(得分:1)

在重新启动设备旋转活动后,

SavedInstanceState将不为null。要检查这一点,您只需在您的onCreate方法中放置断点,并在设备旋转后检查saveInstanceState的值。就我而言,我会收到以下信息:

enter image description here

您应该自己检查。