1. 程式人生 > >Android 頁面跳轉模式

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()方法開始,走生命週期方法。