您的位置:首页 > 移动开发 > Android开发

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

2017-09-19 09:03 543 查看
总的来说有四种方法:

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应用

系统架构设计师

阿里分布式数据库服务实践

—————————————————————————————————————————————————–
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息