本文共 5091 字,大约阅读时间需要 16 分钟。
总的来说有四种方法:
1、使用Application来进行关闭
public class App extends Application { private static Listlists = new ArrayList<>(); public static void addActivity(Activity activity) { lists.add(activity); } public static void clearActivity() { if (lists != null) { for (Activity activity : lists) { activity.finish(); } lists.clear(); } } } 然后写一个基类Activity,在构造构造方法调用App.addActivity(this);就可以实现。
2、使用广播的方式来进行关闭
在基类构造方法中实现注册广播,onDestroy方法取消注册
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(getString(R.string.promotion_action)); registerReceiver(receiver, intentFilter); } BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { finish(); } }; @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); } }
接下来只需要你在想要关闭所有Activity的界面调用
//销毁所有的Activity //关闭本窗口getActivity().finish();//关闭父窗口if(getActivity().getParent()!= null){ getActivity().getParent().finish();}//关闭列表页面Intent intent = new Intent();intent.setAction(getString(R.string.promotion_action));getActivity().sendBroadcast(intent);
3、使用onActivityResult递归回调的方式关闭
1)在基类Activity重写onActivityResult方法通过识别ResultCode来调用finish方法
2)接下来只需要在你想要关闭Activity调用setResult(Result_CLOSE)就可以了
public class BaseActivity extends AppCompatActivity { protected final static int RESULT_CLOSE = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_CLOSE){ setResult(RESULT_CLOSE); finish(); } } }
4.使用setFalgs的方式来关闭
首先先来介绍一个LaunchMode四种模式:
LaunchMode 1)standard和singleTop是相同的,每次都会创建一个新的Activity实例,区别是singleTop当压入栈的Activity与任务栈的栈顶Activit相同则不会创建实例(会调用onNewIntent方法)2)singleInstance和singleTask是相同的,都会保证任务中没有相同的任务,(当执行的Activity与任务中某个Activity相同则会调用onNewIntent方法),不同点是(singleInstance每次都会创建一个任务栈并将Activity压入栈中),(singleTask是在一个任务栈中,如果压入栈的Activity与栈内Activity某个相同则直接将那个Activity移动到栈顶不会创建新的实例)
当然这里并没有用到这四种模式而是运用的是Intent.FLAG_ACTIVITY_CLEAR_TOP,这种标示基本和singleTop类似不同的是如果压入栈的Activity在栈内某个Activity相同则将它上面的所有Activity进行出栈操作。
在每次跳转都加上intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
所以在最后一个Activity后退应用:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //销毁所有的Activity Intent intent = new Intent(this,FirstActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } return super.onKeyDown(keyCode, event); }
这样略先复杂,现在来说一下使用flag的另一种方法:
在退出的Activity的前一个Activity跳转加上intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
就可以了,现在来说一下这几个什么意思
/* FLAG_ACTIVITY_CLEAR_TASK 这个标示将在这个活动开始之前清除该栈中所有的任务,将里面的Activity都finish掉 FLAG_ACTIVITY_TASK_ON_HOME 这个flag将造成新任务在home的上面,就是在启动的Activity点击back之后就会回到home界面 */
—————————————————————————————————————————————————–
java架构师项目实战,高并发集群分布式,大数据高可用视频教程,共760G
下载地址:
https://item.taobao.com/item.htm?id=555888526201
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时 03.Java高级互联网架构师课程 04.Java互联网架构Netty、Nio、Mina等-视频教程 05.Java高级架构设计2016整理-视频教程 06.架构师基础、高级片 07.Java架构师必修linux运维系列课程 08.Java高级系统培训架构课程116课时 + hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门内容详情:
【入门篇】
J2SE的Socket网络编程应用 J2SE的反射机制高级应用 J2SE高深讲解 JAVA编程思想 中级教程 JAVA编程思想 初级教程 JAVA编程思想 高级教程 基于J2SE的QQ聊天工具开发 我来说说面向对象 【进阶篇】 CRM项目 Eclipse Hibernate JAVA WEB开发视频 JAVAWEB开发实战经典-高级案例篇 JAVAWEB JAVA线程并发教程 java网上在线支付实战视频 java设计模式 jdbc junit mybatis spring mvc SpringMvc+Spring+MyBatis+Maven整合视频 SpringMVC Spring Struts2 开发实战讲解 Struts2+Spring3+Hibernate4+Maven+EasyUI整合入门视频 Struts SVN tomcat weblogic WebService从入门到上手企业开发 企业系统OA办公自动化 手机进销存系统 数据结构和算法视频 设计模式系列 【高级篇】 Cas单点登录 Extjs4.1+Spring3.2+hibernate4.1+MySql5商城 Git权威指南 groovy入门视频 Java 8新特性 Lucene Mongodb node.js Nutch相关框架 OA办公自动化系统 Quartz Job定时任务 Solr高级应用视频 Spring Security权限控制 Spring源码解读与设计详析 Struts2源码剖析与架构指导 大型CMS内容管理系统项目 微信入门视频 深入JVM内核—原理、诊断与优化 深入浅出微信公众平台实战开发(微网站、LBS云、Api接口调用、服务号高级接口) 银行接口资料 【架构篇】 ActiveMQ实战 Apache-Tomcat集群搭建 Linux集群 Linux高级架构架构方案及实现指南 Memcached分布式集群 Mysql特级优化课程 Nginx+Tomcat+Memcached群集配置软件包 Nginx服务器搭建 Nginx网站架构实战(Web服务器负载均衡与反向代理) SOA Dubbo storm入门到精通 storm集群的搭建 storm项目实战 UML建模 互联网公司技术架构系列 京东B2C平台推荐搜索的实践和思考 京东大数据分析与创新应用 京东大规模存储持续研发 京东电商海量订单处理OFC系统的关键技术 优米网架构设计方案 基于SOA 思想下的百万数据架构 大型网站提速之MySQL优化 大型网站架构设计 大数据高并发架构实战案例 数据优化技术Redis 数据库高并发原理 深入Java程序性能调优 深入浅出MongoDB应用实战集群及系统架构 深度揭秘服务器端内幕 电商网站之Solr应用 系统架构设计师 阿里分布式数据库服务实践 —————————————————————————————————————————————————–转载地址:https://lovoo.blog.csdn.net/article/details/78026027 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!