當(dāng)前位置:首頁(yè) > IT技術(shù) > 移動(dòng)平臺(tái) > 正文

Android開發(fā)中刪除指定 Activity
2021-09-16 11:35:01

技術(shù)背景

在開發(fā)中,我們經(jīng)常會(huì)遇到這樣一種需求:首頁(yè) --》 輸入賬號(hào)頁(yè) --》 輸入密碼頁(yè) --》登錄頁(yè),當(dāng)走到登錄頁(yè) 登錄后,我們會(huì)來(lái)到首頁(yè),此時(shí),當(dāng)我們按下返回按鈕時(shí),我們不希望調(diào)到 輸入密碼或賬號(hào)頁(yè)面,這個(gè)時(shí)候,我們便需要一種技術(shù) ----- 在特定時(shí)候刪除特定Activity。廢話不多說(shuō),上圖。

Android開發(fā)中刪除指定 Activity_android 技術(shù)原理

自己手寫一個(gè)靜態(tài)的 Activity 管理池,把已啟動(dòng)的 Activity 管理起來(lái),到時(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è)用來(lái)裝 已開啟 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 通過(guò)類名
    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)你們看不見(jiàn):finishAllActivity()里可以不用高級(jí)語(yǔ)法來(lái)循環(huán),用帶 i 的變量那種循環(huán)即可,點(diǎn)到為止。

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >