博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android安全退出应用程序
阅读量:6970 次
发布时间:2019-06-27

本文共 2682 字,大约阅读时间需要 8 分钟。

hot3.png

  1. 杀死进程。

    这种方法是没有效果的只能杀死当前的Activity无法关闭程序,在api 1.5的时候有用,谷歌设计的时候规定程序不能自杀

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

  2. 终止当前正在运行的Java虚拟机,导致程序终止.

    这种方法也是没有效果的,因为Android用的是dalvik虚拟机

    System.exit(0);

  3. 强制关闭与该包有关联的一切, 执行

    这种方法只能杀死别人,无法杀死自己
    java ActivityManager manager = (ActivityManager)

    getSystemService(Context.ACTIVITY_SERVICE);   

     manager.restartPackage(getPackageName());

    --同时需要申请权限

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

既然上面介绍的三种方法都没有效果,那么怎么才能退出应用程序呢?

就是自定义一个Application,在该Application中去定义一个List<Activity>的集合来记录中每一个开启的Activity

在退出的时候去遍历这个List<Activity>集合,然后挨个的进行mActivity.finish()方法,这要求在每开启一个Activity的时候都加入到List集合中,并且在Activity退出的时候从List集合中将其移除。

这种方法也是目前我采用的方法

public class Activity01 extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        MyApp myApp = (MyApp) getApplication();        myApp.activies.add(this);    }    @Override    protected void onDestroy() {        super.onDestroy();        MyApp myApp = (MyApp) getApplication();        myApp.activies.remove(this);    }    public void click1(View view){        Intent intent = new Intent(this,Activity01.class);        startActivity(intent);    }    public void click2(View view){        Intent intent = new Intent(this,Activity02.class);        startActivity(intent);    }    public void exit(View view){        MyApp myApp = (MyApp) getApplication();         for(Activity ac : myApp.activies){             ac.finish();         }    }}public class Activity02 extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main2);        MyApp myApp = (MyApp) getApplication();        myApp.activies.add(this);    }    public void click1(View view) {        Intent intent = new Intent(this, Activity01.class);        startActivity(intent);    }    public void click2(View view) {        Intent intent = new Intent(this, Activity02.class);        startActivity(intent);    }    public void exit(View view) {        MyApp myApp = (MyApp) getApplication();        for (Activity ac : myApp.activies) {            ac.finish();        }    }    @Override    protected void onDestroy() {        super.onDestroy();        MyApp myApp = (MyApp) getApplication();        myApp.activies.remove(this);    }}public class MyApp extends Application {    //存放当前应用程序里面打开的所有的activity    public List
 activies;    @Override    public void onCreate() {        activies = new ArrayList
();        super.onCreate();    } }

转载于:https://my.oschina.net/wangxnn/blog/348079

你可能感兴趣的文章
escape()、encodeURI()、encodeURIComponent()区别详解
查看>>
AgileEAS.NET5.0-界面设计器-使用说明书(上)
查看>>
g80 architecture overview
查看>>
gradle替代maven
查看>>
Linux命令之diff
查看>>
linux 实时调度策略 修改及测试
查看>>
不登录远程查看ssh版本
查看>>
Linux操作系统安全必要保护措施实例
查看>>
GraalVM
查看>>
zcat配合tar解压压缩包中的单独
查看>>
只为完美强大的Linux——视频通讯功能(附完整代码)
查看>>
80个Python经典资料(教程+源码+工具)汇总——下载目录 ...
查看>>
nginx安装
查看>>
Solaris 10安装vim
查看>>
Linux系统有7个运行级别(runlevel)
查看>>
Yii框架官方指南系列23——使用数据库:数据访问对象(DAO)
查看>>
数据结构基本概念 - 学习笔记
查看>>
比较有用的一个排查sshd的命令
查看>>
戏说移动互联网&O2O模式
查看>>
PHP入门经典随笔
查看>>