Android 頁面跳轉模式
簡介
Android 中的頁面跳轉與iOS中的頁面跳轉非常的不同。
Android中的更簡單也更復雜,說其更簡單是因為Android 中開啟一個新的頁面一般用用類似如下的程式碼:
Intent intent = new Intent(this, MainDetailActivity.class);
startActivity(intent);
但是,Android中可以在AndroidManifest.xml
設定每個Activity的launchMode
,類似下面這樣:
android:launchMode="singleTask"
當然,這個launchMode有多種型別,分別應用在不同的場景。
- standard
- singleTop
- singleTask
- singleInstance
standard 模式
如果我們沒有在AndroidManifest.xml
設定 launchMode
,那麼該Activity的launchMode
預設就是standard
模式,它表示新建立一個Activity,然後開啟,並不會複用該Activity的任何例項。
singleTop 模式
該模式 表示 如果該Activity 的例項如果再棧頂,那麼如果要開啟的介面依然是該型別Activity,那麼就會將intent 傳送給棧頂的那個例項,複用該Activity例項,如果棧頂不是該Activity 例項,那麼就建立一個新的例項物件,然後跳轉。當複用時,系統會呼叫onNewIntent()方法,我們可以在onNewIntent()方法中重新載入資料,做資料的裝載工作。
當然,我們也可以使用更簡單的方式:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
recreate();
}
這樣,呼叫recreate();
就會重新建立一個例項,然後從onCreate()方法開始,走生命週期方法。
singleTask 模式
該模式 表示 如果某個Activity 設定為singleTask
,那麼當跳轉到該Activity 時,會先從棧中查詢,是否已經存在該型別的例項,如果存在,那麼系統會將棧中該Activity上面的Acivity全都彈出棧並銷燬,然後將intent傳送給之前的那個物件,同樣系統也會呼叫onNewIntent()方法,我們可以在onNewIntent()方法中重新載入資料,做資料的裝載工作。
當然,我們也可以使用更簡單的方式:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
recreate();
}
這樣,呼叫recreate();
就會重新建立一個例項,然後從onCreate()方法開始,走生命週期方法。
如果棧中不存在該Activity的例項,那麼具就建立一個新的Activity物件,然後跳轉過去即可。
singleInstance 模式
該模式 是如果某個Activity 的launchMode
設定為singleInstance
時,當第一次開啟該Activity時,就會新建一個棧,然後將該Activity放入這個特殊的棧中,最後將這個特殊的棧壓入 主棧中,當再次開啟該Activity時,就會在主棧中查詢該棧所在的位置,然後將其上方的所有Activity都彈出棧銷燬,然後呼叫onNewIntent()方法。我們可以在onNewIntent()方法中重新載入資料,做資料的裝載工作。
當然,我們也可以使用更簡單的方式:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
recreate();
}
這樣,呼叫recreate();
就會重新建立一個例項,然後從onCreate()方法開始,走生命週期方法。