zoukankan      html  css  js  c++  java
  • Android退出程序

      通常一个Android程序会对应多个activity,对于结束一个activity,通常我们会想到使用finish(),finish仅仅是针对activity的,它只是将活动推向后台,并没有立即释放内存,资源并没有被清理。例如A—〉B(由A窗口打开B窗口),如果在B中调用finish(),只是将B窗口关闭了,这时候会显示A窗口。那么如何退出整个程序呢?

    一、Dalvik VM的本地方法

    1. android.os.Process.killProcess(android.os.Process.myPid())    //获取PID , 杀死进程

    2. System.exit(0);   //常规java、c#的标准退出法,返回值为0代表正常退出  

    public void exitProgrames() {
    
            Intent startMain = new Intent(Intent.ACTION_MAIN);
            startMain.addCategory(Intent.CATEGORY_HOME);
            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(startMain);
            android.os.Process.killProcess(android.os.Process.myPid());
            //或者 System.exit(0);
        }

    二、任务管理器方法

      前提:Android 1.5 API Level为3以上

         需要权限:<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-  permission>

      代码:

    ActivityManager actManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
    actManager.restartPackage(getPackageName());

    三、自定义实现管理Activity

    //单例模式管理activity
    public class ActivityManger {
    
        List<Activity> activityList = new LinkedList<Activity>();
        private static ActivityManger instance;
        
        public ActivityManger getInstance(){
            
            if(instance == null){
                instance = new ActivityManger();
            }
            return instance;
        }
        
        //添加activity
        public void addActivity(Activity activity){
            activityList.add(activity);
        }
        
        //遍历关闭每一个activity
        public void exit(){
            
            for(Activity activity: activityList){
                activity.finish();
            }
        }
    }

    四、通过 Intent.FLAG_ACTIVITY_CLEAR_TOP

      A打开B 时,在Intent中加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP

    ntent intent = new Intent();
    intent.setClass(A.this, B.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //设置FLAG
    startActivity(intent); 

      B启动时,将会清除该进程空间的所有Activity。

  • 相关阅读:
    定义一个动态的二维数组?
    学习STL map, STL set之数据结构基础
    CMM
    详细解说STL string
    仔细选择你的容器
    C++字符串类string简析
    流氓软件及反流氓软件的技术分析
    标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
    C++资料下载
    unix系统操作命令大全
  • 原文地址:https://www.cnblogs.com/xuepeng0521/p/4434207.html
Copyright © 2011-2022 走看看