• Android进阶之关闭所有activty


    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 

    关闭所有Activity有以下几种方法:

     

    1、Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);// 必须,没有这个你可以看看效果~
    currentActivity.startActivity(startMain);

    System.exit(0);// 关键,如果换成 finish()效果表面一样,但实际并无关进程,0代表正常关闭。

    2、<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>    

    ActivityManager am = (ActivityManager)getSystemService  (Context.ACTIVITY_SERVICE);   
                am.restartPackage(getPackageName()); 
            这个方法,系统会将,该包下的 ,所有 进程,服务,全部杀掉。

    getPackageManager().clearPackagePreferredActivities("packageName");

    同时,结合这条语句使用。

    3、这两种方法也可以结合使用。

    1. android.os.Process.killProcess(android.os.Process.myPid())    //获取PID  
    
    
    1. Intent intent = new Intent();   
    2. intent.setClass(Android123.this, CWJ.class);   
    3. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置  
    4. startActivity(intent);  
    重要知识点:writeThread.setDaemon(true);// 将该线程标记为守护线程或用户线程。

    // 当正在运行的线程都是守护线程时,Java 虚拟机退出。该方法必须在启动线程前调用。

    4、

    ExitApplication.getInstance().addActivity(this);

        //单例模式中获取唯一的ExitApplication实例     public static ExitApplication getInstance(){       if(null == instance){    instance = new ExitApplication();    }    return instance;      } 

        //添加Activity到容器中     public void addActivity(Activity activity){    activityList.add(activity);     }     //遍历所有Activity并finish     public void exit(){   for(Activity activity:activityList){    activity.finish();    }   System.exit(0);     } 

    5、见一同事的退出方法

    	// 返回按鈕
    	public boolean onKeyDown(int keyCode, KeyEvent event) {
    		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
    			new AlertDialog.Builder(CalendarActivity.this)
    					.setTitle("提示")
    					.setMessage("确定退出程序吗?")
    					.setPositiveButton("确定",
    							new DialogInterface.OnClickListener() {
    								@Override
    								public void onClick(DialogInterface dialog,
    										int which) {
    									// 退出程序(杀死进程)
    									Intent intent = new Intent(
    											Intent.ACTION_MAIN);
    									intent.addCategory(Intent.CATEGORY_HOME);
    									intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    									startActivity(intent);
    									android.os.Process.killProcess(which);
    								}
    							}).setNegativeButton("取消", null).show();
    
    			return true;
    		}
    		return super.onKeyDown(keyCode, event);
    	}


  • 相关阅读:
    一周学C#第五天——命名空间
    一周学C#之第4天——语句
    一周学C#之第一天——基础知识
    数据库ADONET使用强类型DataSet
    .NET中的主要类型简表
    一周学C#第六天——枚举
    一周学C#之第二天(函数)
    一周学C#之第三天——值的类型
    数据库ADONET向数据库提交更新
    一个低级错误导致的StackOverflowException异常
  • 原文地址:https://www.cnblogs.com/fengju/p/6174518.html
Copyright © 2020-2023  润新知