Android总结(1)---如何关闭多个Activity

来源:互联网 发布:返利网在淘宝上买手机 编辑:程序博客网 时间:2024/06/05 06:07

总的来说有四种方法:

1、使用Application来进行关闭

public class App extends Application {      private static List<Activity> lists = 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应用
系统架构设计师
阿里分布式数据库服务实践
—————————————————————————————————————————————————–

原创粉丝点击