根据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};
}
}
)
吗?