finish()
针对单个Activity,会调用onDestroy方法,关闭当前Activity但并没有释放资源,如果Activity历史栈中不仅仅只包含当前的Activity,那么会回退到之前的Activity
System.exit(0)
针对单个Activity,不会调用onDestroy,关闭当前Activity并释放资源,如果Activity历史栈中不仅仅只包含当前的Activity,会报错
android.os.Process.killProcess(android.os.Process.myPid());
针对单个Activity,不会调用onDestroy,关闭当前Activity并释放资源,如果Activity历史栈中不仅仅只包含当前的Activity,会报错
任务管理器模式
据说这种方式将会结束和程序包关联的一切进程(但是实测下来的效果并不理想)
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
if( android.os.Build.VERSION.SDK_INT < 8){
am.restartPackage(getPackageName());
//需要权限android.permission.RESTART_PACKAGES
}else{
am.killBackgroundProcesses(getPackageName());
//需要权限android.permission.KILL_BACKGROUND_PROCESSES
}Intent方式
在从子页面跳转到主页面(需要执行退出程序的页面)时,进行intent设置来清空Activity历史栈,然后在主页面finish()即可
Intent intent = new Intent();
intent.setClass(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);Activity栈
原理就是构建一个单独的Activity栈管理器(需要继承Application),在每个Activity创建的以后,加入其中,然后在退出程序时,遍历它关闭所有Activity,代码参考来源2...
参考来源1:http://blog.sina.com.cn/s/blog_5da93c8f0101772p.html
参考来源2:http://blog.csdn.net/sunnyfans/article/details/7688092
来源:oschina
链接:https://my.oschina.net/u/2329798/blog/511046