一、啟動模式介紹
首先,要了解Activity的啟動流程,必須先了解Activity的啟動模式。Android提供了四種啟動模式:standard、singleTop、singleTask和singleInstance。
standard是默認的啟動模式,每次啟動該Activity都會在任務棧中創建一個新的實例。
singleTop是指如果該Activity在棧頂,那麼不會創建一個新的實例,而是復用已經存在的Activity。如果不在棧頂,則會創建一個新的Activity實例。
singleTask是指如果該Activity已經存在於棧中,那麼不會再創建一個新的實例,而是將所有在該Activity實例上面的實例全部出棧,然後再調用該Activity的onNewIntent()方法傳遞一個新的Intent。如果該Activity不在棧中,則會創建一個新實例。
singleInstance是指該Activity獨立於其他任務棧,如果該Activity不存在,則會創建一個新實例,創建的實例獨立於其他任務棧,如果存在,則會直接調用該Activity的onNewIntent()方法傳遞一個新的Intent,而不會創建新實例。
二、Intent啟動Activity
在Android中,使用Intent啟動Activity是最常見的方法,可以通過Intent傳遞參數、設置標誌位和啟動模式等。
示例代碼如下:
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("name", "小明"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
上述代碼中,首先創建了一個Intent對象並指定要啟動的Activity,通過putExtra()方法傳遞參數,使用setFlags()方法設置標誌位,最後調用startActivity()方法啟動Activity。
三、啟動模式在AndroidManifest中的配置
啟動模式可以通過在AndroidManifest.xml中的Activity標籤下進行配置。
示例代碼如下:
上述代碼中,通過在Activity標籤下設置android:launchMode屬性即可指定該Activity的啟動模式。
四、TaskAffinity屬性
在Android中,每個任務棧都有一個任務棧名稱,稱為TaskAffinity,如果兩個Activity具有相同的TaskAffinity,則它們會被創建在同一個任務棧中,如果不同,則會創建在不同的任務棧中。
Activity的TaskAffinity屬性可以通過在AndroidManifest.xml中的Activity標籤下進行配置。
示例代碼如下:
上述代碼中,通過設置android:taskAffinity屬性,指定了該Activity的TaskAffinity為com.example.task1。
五、FLAG_ACTIVITY_CLEAR_TOP標誌位
在使用Intent啟動Activity時,可以使用FLAG_ACTIVITY_CLEAR_TOP標誌位,該標誌位會將棧頂的Activity實例以上的所有Activity實例全部出棧,然後再將該Activity實例置於棧頂。
示例代碼如下:
Intent intent = new Intent(this, SecondActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
上述代碼中,通過addFlags()方法設置FLAG_ACTIVITY_CLEAR_TOP標誌位後啟動Activity,該標誌位會將SecondActivity之前的Activity全部出棧,使得SecondActivity處於棧頂。
六、總結
Android的啟動模式非常靈活,可以根據實際需要進行配置和使用。通過合理的配置啟動模式和標誌位,可以實現對Activity啟動流程的精細控制。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193453.html