• 當前位置:首頁 > IT技術 > 移動平臺 > 正文

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

    技術背景

    在開發中,我們經常會遇到這樣一種需求:首頁 --》 輸入賬號頁 --》 輸入密碼頁 --》登錄頁,當走到登錄頁 登錄后,我們會來到首頁,此時,當我們按下返回按鈕時,我們不希望調到 輸入密碼或賬號頁面,這個時候,我們便需要一種技術 ----- 在特定時候刪除特定Activity。廢話不多說,上圖。

    Android開發中刪除指定 Activity_android 技術原理

    自己手寫一個靜態的 Activity 管理池,把已啟動的 Activity 管理起來,到時候想怎么刪就怎么刪

    代碼梳理
    第一步:封裝一個 CatchActivity 類
    package com.example.treetest.utils;
    
    import android.app.Activity;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class CatchActivity {
        //設置一個用來裝 已開啟 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() 里調用??

            //往 Activity靜態管理池中添加
            if(!CatchActivity.activityList.contains(this)){
                CatchActivity.addActivity(this);
            }

    第三步:選擇一個“良辰吉日”刪除指定Acitivity

            //刪除 靜態activity管理池
            CatchActivity.finishSingleActivityByClass(TestActivity.class);
            CatchActivity.finishSingleActivityByClass(TestTireInfoActivity.class);
            CatchActivity.finishSingleActivityByClass(ShowDataActivity.class);
    總結

    到此為止,你已經完全控制了 Activity。

    注意:盡量不要用?finishAllActivity() 因為Activity雖然finish()了,可是activityList里還存在著相應的Activity,慎用?。?!要用也可以,自己優化一下代碼即可,我就不在這里統一講解了哈?。?!

    就當你們看不見:finishAllActivity()里可以不用高級語法來循環,用帶 i 的變量那種循環即可,點到為止。

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

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码