当前位置: 首页 > article >正文

Android 退出app方式(回忆录)

一、点击返回键或者设备back键调用finish


private void back(){
    finish();
}

   或
    @Override
    public void onBackPressed() {
          super.onBackPressed();
    }

二、结束进程

android.os.Process.killProcess(android.os.Process.myPid());

三、方法二exit结束java虚拟机

System.exit(0);

四、根据Activity的生命周期

            Intent intent = new Intent(context, QrcodePage.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK |         
            Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);

五、常用的方法,使用Activity栈管理Activity

下面是工具类


/**
 * 界面管理
 */

public class ActivityUtil {

    private static final String TAG = "ActivityUtil";
    /**
     * 单一实例
     */
    private static ActivityUtil sActivityUtil;
    /**
     * Activity堆栈 Stack:线程安全
     */
    public Stack<Activity> mActivityStack = new Stack<>();

    /**
     * 私有构造器 无法外部创建
     */
    private ActivityUtil() {
    }

    /**
     * 获取单一实例 双重锁定
     * @return this
     */
    public static ActivityUtil getInstance() {
        if (sActivityUtil == null) {
            synchronized (ActivityUtil.class) {
                if (sActivityUtil == null) {
                    sActivityUtil = new ActivityUtil();
                }
            }
        }
        return sActivityUtil;
    }

    /**
     * 添加Activity到堆栈
     */
    public void addActivity(Activity activity) {
        mActivityStack.add(activity);
    }

    /**
     * 移除堆栈中的Activity
     * @param activity Activity
     */
    public void removeActivity(Activity activity) {
        if (activity != null && mActivityStack.contains(activity)) {
            mActivityStack.remove(activity);
        }
    }

    /**
     * 获取当前Activity (堆栈中最后一个添加的)
     * @return Activity
     */
    public Activity getCurrentActivity() {
        return mActivityStack.lastElement();
    }

    /**
     * 获取指定类名的Activity
     */
    public Activity getActivity(Class<?> cls) {
        if (mActivityStack != null)
            for (Activity activity : mActivityStack) {
                if (activity.getClass().equals(cls)) {
                    return activity;
                }
            }
        return null;
    }

    /**
     * 结束当前Activity (堆栈中最后一个添加的)
     */
    public void finishCurrentActivity() {
        Activity activity = mActivityStack.lastElement();
        finishActivity(activity);
    }

    /**
     * 结束指定的Activity
     * @param activity Activity
     */
    public void finishActivity(Activity activity) {
        if (activity != null && mActivityStack.contains(activity)) {
            mActivityStack.remove(activity);
            activity.finish();
        }
    }

    /**
     * 结束指定类名的Activity
     * @param clazz Activity.class
     */
    public void finishActivity(Class<?> clazz) {
        for (Activity activity : mActivityStack) {
            if (activity.getClass().equals(clazz)) {
                finishActivity(activity);
                break;
            }
        }
    }

    /**
     * 结束所有Activity
     */
    public void finishAllActivity() {

        for (int i = mActivityStack.size() - 1; i >= 0; i--) {

            if (mActivityStack.get(i) != null) {
                finishActivity(mActivityStack.get(i));
            }
        }
        mActivityStack.clear();
    }

    /**
     * 结束某个Activity之外的所有Activity
     */
    public void finishAllActivityExcept(Class<?> clazz) {
        for (int i = mActivityStack.size() - 1; i >= 0; i--) {

            if (mActivityStack.get(i) != null && !mActivityStack.get(i).getClass().equals(clazz)) {
                finishActivity(mActivityStack.get(i));
            }
        }
    }

    /**
     * 退出应用程序
     */
    public void exitApp() {
        try {
            finishAllActivity();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.exit(0);
        }
    }

    /**
     * 判断某个Activity 界面是否在前台
     * @param context
     * @param className 某个界面名称
     * @return
     */
    public static boolean  isForeground(Context context, String className) {
        if (context == null || TextUtils.isEmpty(className)) {
            return false;
        }

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
        if (list != null && list.size() > 0) {
            ComponentName cpn = list.get(0).topActivity;
            if (className.equals(cpn.getClassName())) {
                return true;
            }
        }
        return false;
    }

}


http://www.kler.cn/a/280765.html

相关文章:

  • 【C++ STL哈希容器】unordered_set 无序集合
  • react 中的useState useEffect
  • Vue:组件化开发
  • K8S 无状态应用有状态应用
  • 【大模型】llama系列模型基础
  • 【Python机器学习】NLP概述——深度处理
  • VBA之正则表达式(47)-- 快速将公式转换为静态值计算
  • 免杀笔记 ---> CS特性角度看Veh免杀
  • 大数据技术之Flume应用案例(2)
  • Java笔试面试题AI答之线程(21)
  • 资料分析笔记
  • GNN的理解难点:一种不同于传统神经网络的复杂性
  • NoSql数据库 Redis集群详解
  • 设计模式 9 装饰器模式
  • AI模型:追求全能还是专精?
  • 数据结构——链表学习
  • 39-nacos eureka zookeeper区别
  • rk3568 Android12 增加 USB HOST 模式开关
  • 关于异常断电后jmeter的jmx文件异常变成二进制文件并成功恢复的心酸历程
  • git学习教程--分支操作+远程仓库相关过程详述