采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity)
问题:
多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序。
网上资料:{
finish()和system(0)都只能退出单个activity。杀进程等的等方式都不行~~~
解决问题:
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,再次开启A时将会清除该进程空间的所有Activity。
在D中使用下面的代码:
- Intent intent = new Intent();
- intent.setClass(D.this, A.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
- startActivity(intent);
- finish();//关掉自己
在A中加入代码:
- //Override
- protected void onNewIntent(Intent intent) {
- // TODO Auto-generated method stub
- super.onNewIntent(intent);
- //退出
- if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
- finish();
- }
- }
A的Manifest.xml配置成android:launchMode="singleTop"
原理总结:
一般A是程序的入口点,从D起一个A的activity,加入标识Intent.FLAG_ACTIVITY_CLEAR_TOP这个过程中会把栈中B,C,都清理掉。因为A是android:launchMode="singleTop"
不会调用oncreate(),而是响应onNewIntent()这时候判断Intent.FLAG_ACTIVITY_CLEAR_TOP,然后把A finish()掉。
栈中A,B,C,D全部被清理。所以整个程序退出了。
诗帆个人补充:
1.可以把A设置成不可见的Acitivity(方法见下面),然后在它的onCreate方法里跳转到“真正”的载入界面
就可以实现在D中点退出程序按钮时看上去立即退出程序的效果
2.A必须是程序启动的第一个Activity才能起到这种立即退出的效果,因为Intent.FLAG_ACTIVITY_CLEAR_TOP只会把目标Activity的“上面”的Activity清理掉,而如果目标Activity的“下面”还有Activity(换句话说,目标Activity不在栈底),则finish后只会到他下面的那个Activity,而不是立即退出的效果了
3.不可见Activity
在项目的AndroidManifest.xml文件中相应的Activity标签中添加这样一行:
android:theme=”@android:style/Theme.NoDisplay”
这样一来,当这个Activity启动的时候,就不会显示出界面了。
Android 2.2完全退出程序, 使用广播机制
http://www.iteye.com/topic/1112269
采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity)的更多相关文章
- 采用FLAG_ACTIVITY_CLEAR_TOP退出 多activity 或 整个程序
问题: 多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序. 网上资料:{ finish()和system(0)都只能退出单个activity. ...
- 退出Android程序时清除所有activity的实现方法
思路: 1. 自定义ActivityList管理类,添加删除维护该list; 2.Activity Stack 类似上面: 3.singleTask定义一个Activity为该启动模式,然后当返回时, ...
- Android完全退出应用程序,完美解决方案
最近公司工作不是很忙,就抽空研究了下Android的引导页,但是在写完引导页并且进入到住页面之后,在退出时,采用"再按一次退出"的方式去实现的,用的方式是杀掉进程跟exit,即:a ...
- Android 完全退出应用程序
随着业务逻辑越来越复杂,退出应用程序也不像之前那个直接将Activity finish()掉就可以了,在网上看到很多完全退出App的文章,但是实践之后发现,并不像文章中描述的那样,不是方法过时了,就是 ...
- [Android设计模式]Android退出应用程序终极方法
如何干净彻底地退出Android应用程序,是很多开发者的心头痒.如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity? 这里,我们提出一种通过实 ...
- android 完全退出应用程序(重要)
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个A ...
- android完全退出应用程序
android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...
- android 提示用户是否退出应用程序 提升用户体验
首先明确一点,用户的一直点击的返回键,之后就会退出到桌面.那么,如何提示呢?很简单,在用户一顿返回键回到程序入口处(即程序的第一个Activity)给用户一个提示,您再按可就退出程序啦?那么如何在程序 ...
- android使用广播退出应用程序
由于在(Widget或Service.BroadcastReceiver中)使用startActivity()方法启动activity时需使用FLAG_ACTIVITY_NEW_TASK flag,所 ...
随机推荐
- win10 免安装版本的MySQL的下载安装和配置
一.概述 网上找了好多,发现好多不是linux系统的就是与现在新版本有出入,自己做小项目亲手实践了一下,供大家借鉴. MySQL版本:mysql-5.7.17 下载方法: 1.MySQL官方网址htt ...
- 深入理解 ajax系列第一篇(XHR 对象)
1999年,微软公司发布了IE5, 第一次引入新功能:允许javascript 脚本向服务器发起 hffp 请求.这个功能方式并没有被引起注意,知道2004年 Gmail 发布和 Google Map ...
- scrapy中使用 IP 代理
在 scrapy 中使用 ip 代理需要借助中间件的功能 首先在settings 中设置好中间件,中间件优先级数字越小越先被执行 , } 然后编写中间件,拦截请求设置代理 class ProxyMid ...
- Hibernate笔记一
背景 jdbc的优缺点 A:直接操作底层,提供了简单,便捷的访问数据库方法,跨平台比较强,灵活,可以写很多赋值的SQL语句:是最底层的数据库操作,所以效率比较高,Sql语句可以自己选择写,采用效率最高 ...
- 并发编程之Event事件
Event事件 用来同步线程之间的状态. 举个例子: 你把一个任务丢到了子线程中,这个任务将异步执行.如何获取到这个任务的执行状态 解决方法: 如果是拿到执行结果 我们可以采用异步回调, 在这里我 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定文本右对齐
<!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...
- SpringMvc 初步配置
spring-aop.jarspring-bean.jarspring-context.jarspring-core.jarspring-web.jarspring-webmvc.jarcommons ...
- scrapy shell中遇到的坑
如果直接scrapy shell +网址 然后发现返回200 但是request和response的网址不同,那么可以使用百度短网址 https://dwz.cn/ 进行缩短.这样一般就能解决问题
- redhat 7.6 用户和组
用户 useradd user1 //新建用户user1 userdel user1 //删除用户user1 userdel -r user1 //删除用户并且删除h ...
- Day1-C-CF-1144A
简述:给你一串字符,判断是否由连续字母构成且每个字符只出现一次 思路:用set直接储存,判断size和初末位置字母与size的关系即可 代码: #include<iostream> #in ...