国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android開發之關閉所有的activity的方法

2019-12-12 01:26:16
字體:
來源:轉載
供稿:網友

當app中打開了多個activity的時候,由于進入的比較深,所以,很多app不得不讓用戶一步一步退回到第一個界面(MainActivity),在一步一步退回的時候,逐個釋放。

今天寫kotlin來實現,在任意位置,直接退出應用的方法。

首先,每當打開一個 activity 的時候,需要有一個地方做記錄,以便讓一個循環遍歷代碼釋放所有使用過的 activity 資源。

那么,建立一個數組。這里使用 MutableList,因為它有 add 和 remove 方法,很好用。

var activities:MutableList<Activity> = arrayListOf()

這個數組就是用來記錄當前打開了多少個 activity 的。

那么每次打開一個新的 activity 就需要執行一個添加到這個數組的動作。

fun ActivityAdd(activity:Activity){  activities.add(activity)}

然后來寫最核心的操作,釋放所有的 activity 。

首先是遍歷數組,遍歷到的 activity 判斷是否已經為 null 了,不為 null 證明當前還沒有釋放掉,那么把這個 activity finish 掉。再從數組中 remove 掉。

fun ActivityFinishAll(){  for (activity:Activity in activities){    if (activity != null){      activity.finish()      activities.remove(activity)    }  }}

這還沒有完,要在每個 activity onCreate 的時候,執行數組的添加動作

ActivityAdd(this)

就寫在 override fun onCreate(savedInstanceState: Bundle?) 方法內。

  override fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    setContentView(R.layout.activity_main)    ActivityAdd(this)    ...  }

當然,這樣還不足夠,還需要對單獨的 activity 實現移除功能。

fun ActivityRemove(activity: Activity){  activities.remove(activity)}

這樣就具備基本功能了。

PS:其他activity方法關閉方法

四種結束當前的activity方法

//關閉當前activity方法一   finish(); //關閉當前界面方法二   android.os.Process.killProcess(android.os.Process.myPid());    //關閉當前界面方法三   System.exit(0);  //關閉當前界面方法四   this.onDestroy(); 

但如果已經啟動了四個Activity:A,B,C和D,

在D Activity里,想再啟動一個Activity B,但不變成A,B,C,D,B,而是希望是A,B,而且B上的數據依然保留

Intent intent = new Intent(); intent.setClass(TableActivity.this, FrameActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//設置不要刷新將要跳到的界面 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以關掉所要到的界面中間的activity startActivity(intent); 

如果已經啟動了四個Activity:A,B,C和D,

在D Activity里,想再啟動一個Activity B,但不變成A,B,C,D,B,而是希望是A,B,而且B上的數據不保留

Intent intent = new Intent(); intent.setClass(TableActivity.this, FrameActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以關掉所要到的界面中間的activity startActivity(intent); 

如果已經啟動了四個Activity:A,B,C和D,在D Activity里,想再啟動一個 Activity B,但不變成A,B,C,D,B,而是希望是A,C,D,B,則可以像下面寫代碼:

Intent intent1 = new Intent(TableActivity.this, FrameActivity.class);  intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   startActivity(intent1);  

如果已經啟動了四個Activity:A,B,C和D,在D Activity里,想要一次性關閉所有的activity

創建一個專門用來處理activity的類

package com.layout;  import java.util.LinkedList;  import java.util.List;  import android.app.Activity;  import android.app.Application;  /**  * 一個類 用來結束所有后臺activity  * @author Administrator  *  */ public class SysApplication extends Application {   //運用list來保存們每一個activity是關鍵   private List<Activity> mList = new LinkedList<Activity>();   //為了實現每次使用該類時不創建新的對象而創建的靜態對象   private static SysApplication instance;    //構造方法   private SysApplication(){}   //實例化一次   public synchronized static SysApplication getInstance(){      if (null == instance) {        instance = new SysApplication();      }      return instance;    }    // add Activity    public void addActivity(Activity activity) {      mList.add(activity);    }    //關閉每一個list內的activity   public void exit() {      try {        for (Activity activity:mList) {          if (activity != null)            activity.finish();        }      } catch (Exception e) {        e.printStackTrace();      } finally {        System.exit(0);      }    }    //殺進程   public void onLowMemory() {      super.onLowMemory();        System.gc();    }  } 

在每個activity被創建時加上

SysApplication.getInstance().addActivity(this); 

將該activity添加到list中去。

當你想關閉時,調用SysApplication的exit方法

//關閉整個程序 SysApplication.getInstance().exit()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河北省| 鸡东县| 桂林市| 达日县| 三明市| 睢宁县| 宁都县| 洪雅县| 靖宇县| 万源市| 观塘区| 井冈山市| 西乡县| 毕节市| 水城县| 云浮市| 夏邑县| 石狮市| 梨树县| 嘉定区| 江川县| 东阳市| 苗栗市| 平原县| 永善县| SHOW| 朝阳县| 佛山市| 曲松县| 宝山区| 虞城县| 永州市| 桦甸市| 临沧市| 阿克苏市| 武城县| 静宁县| 林州市| 读书| 浪卡子县| 彰化县|