关闭多个activity
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢?
首先要说明在B中直接使用finish(),接下来手机显示的还是主窗口A,所以一起来看看Android开发网是如何实现的吧.
1. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES,我们直接结束自己的package即可,直接使用ActivityManager类的restartPackage方法即可,参数为package name,该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager对象,这种方法系统提供的,但需要显示声明权限,所以使用中需要综合考虑。
3. 根据Activity的声明周期
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);
接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
如果把A做为程序启动页面的话在A里写一个onStart()方法。
protected void onStart() {
super.onStart();
Intent intent = getIntent();
int x = intent.getIntExtra("flag");
if (x == 0)
finish();
}
然后在B,C,D的关闭方法块儿上加入以下方法。
Intent intent = new Intent();
intent.setClass((B或者C或者D).this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("flag", 1);
startActivity(intent);
在这里intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);这条语句是关键
这样的话当执行关闭的代码块儿的时候会启动A这个activity,然后执行onStart()方法,启动onStart()方法以后效果就跟大家期待的那样完全退出程序。
这样的话在既保留了返回按钮的功能又可以退出整个应用程序。
转载于:https://www.cnblogs.com/xilin/archive/2012/07/31/2617413.html
关闭多个activity相关推荐
- Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
本文将带你了解Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...
- Android点击这个关闭那个,Android关闭指定的Activity或多个Activity
接触过Android的应该都知道关闭一个Activity直接调用finish()就好啦!但项目中偶尔会遇到在某个Activity中关闭另一个Activity的需求.举个栗子,比如开发某个APP,用户从 ...
- Android Activity栈管理 制定关闭某一个Activity,关闭所有Activity
系统Api :打开新的Activity 关闭之前所有Activity Intent intent = new Intent(this, LoginActivity.class); intent.set ...
- 安卓学习之--如何关闭所有的activity
根据Activity的声明周期 方法1 我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Inte ...
- Android之退出应用关闭项目每个Activity的总结
思路 我们先封装好一个类叫MyApplication这个类,把这个类设置为单例模式,只有一个对象,然后在这个类里面写一个能装Activity的集合,相当于一个栈,然后每次有activity的时候,就去 ...
- android 为什么不调用onDestroy方法关闭activity
前天有个同学突然咨询我,说关闭android的activity,为什么不直接调用ondestroy方法,而是要调用activity.finish(). 我这里总结下我的理解: 1.我们知道onDest ...
- Activity的知识
什么是 Activity? 通俗一点说 Activity 就是一个界面,这个界面里面可以放置各种控件.Activity 的界面也是 用 xml 文件表示的,放置在 res->layout ...
- activity生命周期及数据保存
为什么80%的码农都做不了架构师?>>> public class ActivityLife extends Activity {// 在Activity生命周期开始时被调用@ ...
- day4 Activity相关
什么是Activity? 与用户交互的接口,提供用户触摸,点击,滑动的界面.Android中的activity全都归属于task管理 .task 是多个 activity 的集合,这些 activit ...
最新文章
- android 百度导航滑动会异常,百度导航Android版问题集
- Tomcat关闭日志catalina.out
- 架构师之路 — 软件架构 — 应用架构设计模式
- [java多线程] - 锁机制同步代码块信号量
- MySQL SELECT..INTO OUTFILE语句只能导出1000行的故障
- 82%开源软件兼容Windows
- 微软公司服务器主题软件,微软重大IT升级 七款产品巩固软件帝国
- 等比数列三角形 (数论 + 黄金分割点)+ JOISC 2016 Day3 T3 「电报」(基环树 + 拓扑排序)
- LeetCode 1813. 句子相似性 III
- gcn语义分割_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...
- npm i 命令长时间卡住的解决办法
- ajax请求传递参数的方式,Ajax请求 一般处理程序参数传递的几种方式
- rsa算法的java实现,RSA算法的实现——java版
- 服务器 虚拟机 崩溃,认识VMware虚拟机,系统崩溃或异常,可通过快照还原磁盘文件系统...
- Kubernetes—Pod
- JAVA学习导图、思维导图
- 解决git bash中无法粘贴的问题
- WooCommerce REST API的初学者指南
- catia钣金根据线段折弯_CATIA钣金模块进阶教程.ppt
- python解析html用哪个模块_[转载]python模块学习---HTMLParser(解析HTML文档元素)