編輯:關於Android編程
當應用運行起來後就會開啟一條線程,線程中會運行一個任務棧,當Activity實例創建後就會放入任務棧中。Activity啟動模式的設置在AndroidManifest.xml文件中,通過配置Activity的屬性android:launchMode=""設置。
一、啟動模式介紹
啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標簽的android:launchMode屬性設置;
啟動模式有4種,分別為standard、singleTop、singleTask、singleInstance;
講解啟動模式之前,有必要先講解一下“任務棧”的概念;
任務棧
每個應用都有一個任務棧,是用來存放Activity的,功能類似於函數調用的棧,先後順序代表了Activity的出現順序;比如Activity1-->Activity2-->Activity3,則任務棧為:
二、啟動模式
(1)standard模式(默認):每次激活Activity時(startActivity),都創建Activity實例,並放入任務棧;
我們平時直接創建的Activity都是這種模式的Activity,這種模式的Activity的特點是:只要你創建了Activity實例,一旦激活該Activity,則會向任務棧中加入新創建的實例,退出Activity則會在任務棧中銷毀該實例。
(2)singleTop模式:如果某個Activity自己激活自己,即任務棧棧頂就是該Activity,則不需要創建,其余情況都要創建Activity實例;
(3)singleTask模式:如果要激活的那個Activity在任務棧中存在該實例,則不需要創建,只需要把此Activity放入棧頂,並把該Activity以上的Activity實例都pop;
如果任務棧中存在該模式的Activity實例,則把棧中該實例以上的Activity實例全部移除,調用該實例的newInstance()方法重用該Activity,使該實例處於棧頂位置,否則就重新創建一個新的Activity實例。
(4)singleInstance模式:如果應用1的任務棧中創建了MainActivity實例,如果應用2也要激活MainActivity,則不需要創建,兩應用共享該Activity實例;
當該模式Activity實例在任務棧中創建後,只要該實例還在任務棧中,即只要激活的是該類型的Activity,都會通過調用實例的newInstance()方法重用該Activity,此時使用的都是同一個Activity實例,它都會處於任務棧的棧頂。此模式一般用於加載較慢的,比較耗性能且不需要每次都重新創建的Activity。
SingTask的應用:
可以用來退出整個應用。
將主Activity設為SingTask模式,然後在要退出的Activity中轉到主Activity,然後重寫主Activity的onNewIntent函數,並在函數中加上一句finish。
附:
退出單個Activity方法:
調用finish
殺死該進程:killprocess(Process.mId)
終止正在運行的虛擬機:system.exit()
退出整個應用:
制造拋異常導致整個程序退出
將所有的activity放入到一個list中,然後在需要退出的時候,將所有的activity,finish掉
通過廣播來完成退出功能
通過廣播來完成退出功能,具體實現過程是這樣的:在每個Activity創建時(onCreate時)給Activity注冊一個廣播接收器,當退出時發送該廣播即可。大概的代碼如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(); filter.addAction("finish"); registerReceiver(mFinishReceiver, filter); …… } private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if("finish".equals(intent.getAction())) { Log.e("#########", "I am " + getLocalClassName() + ",now finishing myself..."); finish(); } } };
把上面的代碼寫在一個基類裡面,這樣,在需要退出的地方調用close,發送廣播,每個Activity接收到廣播後,就會將自己finish掉。
以上所述是小編給大家分享的Android入門之Activity四種啟動模式(standard、singleTop、singleTask、singleInstance),希望大家喜歡。
一、簡介硅谷商城是一款按照企業級標准研發的項目。本套代碼是目前國內市場第一套詳細講解商城類項目的免費代碼。該代碼中的內容包括但不僅限於,框架的搭建、主頁模塊、分類模塊、發
1、AlertDialog對話框 AlertDialog.Builder builder=new Builder(HomeActivity.this); buil
androidstudio中dialog是直接創建的 非自定義真對以前的方法!先看自定義對話框,就是讓對話框模樣按照自己想要的樣式來顯示。開撸!根據自己的要求布局xml;
本周的主要內容介紹Gradle,NDK,管理依賴和Git等一、GradleGradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它