Android入門:Activity四種啟動模式


一、啟動模式介紹

  啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標簽的android:launchMode屬性設置;

  啟動模式有4種,分別為standard、singleTop、singleTask、singleInstance;

講解啟動模式之前,有必要先講解一下“任務棧”的概念;

  任務棧

  每個應用都有一個任務棧,是用來存放Activity的,功能類似於函數調用的棧,先后順序代表了Activity的出現順序;比如Activity1-->Activity2-->Activity3,則任務棧為:

二、啟動模式

(1)standard:每次激活Activity時(startActivity),都創建Activity實例,並放入任務棧;

(2)singleTop:如果某個Activity自己激活自己,即任務棧棧頂就是該Activity,則不需要創建,其余情況都要創建Activity實例;

(3)singleTask:如果要激活的那個Activity在任務棧中存在該實例,則不需要創建,只需要把此Activity放入棧頂,並把該Activity以上的Activity實例都pop;

(4)singleInstance:如果應用1的任務棧中創建了MainActivity實例,如果應用2也要激活MainActivity,則不需要創建,兩應用共享該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掉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM