技術(shù)背景
在開發(fā)中,我們經(jīng)常會(huì)遇到這樣一種需求:首頁 --》 輸入賬號(hào)頁 --》 輸入密碼頁 --》登錄頁,當(dāng)走到登錄頁 登錄后,我們會(huì)來到首頁,此時(shí),當(dāng)我們按下返回按鈕時(shí),我們不希望調(diào)到 輸入密碼或賬號(hào)頁面,這個(gè)時(shí)候,我們便需要一種技術(shù) ----- 在特定時(shí)候刪除特定Activity。廢話不多說,上圖。
技術(shù)原理自己手寫一個(gè)靜態(tài)的 Activity 管理池,把已啟動(dòng)的 Activity 管理起來,到時(shí)候想怎么刪就怎么刪
代碼梳理第一步:封裝一個(gè) CatchActivity 類
package com.example.treetest.utils;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
public class CatchActivity {
//設(shè)置一個(gè)用來裝 已開啟 activity 容器
public static List<Activity> activityList = new ArrayList<>();
//判斷容器中是否已存在改 activity,不存在則添加
public static void addActivity(Activity activity){
if (!activityList.contains(activity)){
activityList.add(activity);
}
}
//刪除所有 activity
public static void finishAllActivity(){
for (Activity temp: activityList){
temp.finish();
}
}
//刪除指定 activity
public static void finishSingleActivity(Activity activity){
if (activity != null){
if (activityList.contains(activity)){
activityList.remove(activity);
}
activity.finish();
}
}
//刪除指定activity 通過類名
public static void finishSingleActivityByClass(Class<?> cls){
Activity tempActivity = null;
for (Activity temp : activityList){
if (temp.getClass().equals(cls)){
tempActivity = temp;
}
}
finishSingleActivity(tempActivity);
}
}
?第二步:在需要管理的 Activity 里的 onCreate() 里調(diào)用??
//往 Activity靜態(tài)管理池中添加
if(!CatchActivity.activityList.contains(this)){
CatchActivity.addActivity(this);
}
第三步:選擇一個(gè)“良辰吉日”刪除指定Acitivity
//刪除 靜態(tài)activity管理池
CatchActivity.finishSingleActivityByClass(TestActivity.class);
CatchActivity.finishSingleActivityByClass(TestTireInfoActivity.class);
CatchActivity.finishSingleActivityByClass(ShowDataActivity.class);
總結(jié)
到此為止,你已經(jīng)完全控制了 Activity。
注意:盡量不要用?finishAllActivity() 因?yàn)锳ctivity雖然finish()了,可是activityList里還存在著相應(yīng)的Activity,慎用?。。∫靡部梢?,自己優(yōu)化一下代碼即可,我就不在這里統(tǒng)一講解了哈?。?!就當(dāng)你們看不見:finishAllActivity()里可以不用高級(jí)語法來循環(huán),用帶 i 的變量那種循環(huán)即可,點(diǎn)到為止。
本文摘自 :https://blog.51cto.com/u