完全关闭App的两种做法
做项目的时候,涉及到一个注销登录的过程,这时候需要关闭之前打开的所有Activity。仅finish当前Activity显然是不够的,需要把返回栈中的Activity一个个销毁。我实践过的方法有两种:
1、基础类BaseActivity中注册广播接收器,接受关闭所有Activity的广播
2、基础类BaseActivity中将Activity加入一个集合中,并提供一个静态finishAll的方法统一关闭
备注:App中所有Activity直接或间接继承自BaseActivity。
一、使用广播接收器发送统一销毁广播
ExitAppReceiver 广播接收器代码:
public class ExitAppReceiver extendsBroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals("exit_app")){if (context != null){if (context instanceofActivity){((Activity)context).finish();}if (context instanceofService){((Service)context).stopSelf();}}}}
}
BaseActivity中注册销毁广播接收器:
public class BaseActivity extendsAppCompatActivity {private static final String TAG = "BaseActivity";private ExitAppReceiver exitAppReceiver;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);registerExitAppReceiver();//注册}@Overrideprotected void onDestroy() {super.onDestroy();unRegisterExitAppReceiver();//销毁}private void registerExitAppReceiver(){IntentFilter filter = new IntentFilter();filter.addAction("exit_app");exitAppReceiver = new ExitAppReceiver();registerReceiver(exitAppReceiver, filter);}private void unRegisterExitAppReceiver(){unregisterReceiver(exitAppReceiver);}
}
发送关闭所有Activity广播:
Intent intent = new Intent("exit_app");
sendBroadcast(intent);
二、采用ActivityCollector(方法参考郭霖《第一行代码》第2版)
ActivityCollector源码
public class ActivityCollector {public static List<Activity> list = new ArrayList<>();public static void addActivity(Activity activity){list.add(activity);}public static void removeActivity(Activity activity){list.remove(activity);}public static void finishAllActivity(){for (Activity activity :list) {if (!activity.isFinishing()){activity.finish();}}}
}
在BaseActivity中添加和移除:
@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityCollector.addActivity(this);}@Overrideprotected void onDestroy() {super.onDestroy();ActivityCollector.removeActivity(this);}
转载于:https://blog.51cto.com/weijiancheng/1897763
完全关闭App的两种做法相关推荐
- html点击空白处关闭,vue中实现点击空白区域关闭弹窗的两种方法
1. 第一种做法 首页在外层容器里面取一个名字为main,即ref="main",当bankSwitch为true的时候,弹窗出现 你好我是弹窗里面的内容部分 所触发的事件如下: ...
- CCIE理论-第十三篇-IPV6-路由-静态+(EIGRP+OSPF)两种做法+IPV4-ARP代理详解(精髓篇)
CCIE理论-第十三篇-IPV6-路由-静态+(EIGRP+OSPF)两种做法+IPV4-ARP代理详解(精髓篇) 其实呢,路由协议,静态路由 他还是ipv4那一套,只不过多了点东西 该怎么搞怎么搞, ...
- SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机)【两种做法】
SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机)[两种做法] 手动博客搬家: 本文发表于20181217 23:54:35, 原地址https: ...
- sql server数据集中取第一条记录及保留几位小数的两种做法及前n行写法
1.使用top(1) eg: select top(1) num,Name from M_Student where name = 'xy' 前n行可使用top https://blog.csdn.n ...
- PyCharm创建app的两种方式
PyCharm创建app的两种方式 方式1 1-1 在terminal中敲如下代码 python manage.py startapp xxx 1-2 在settings.py中INSTALLED_A ...
- Python关于人脸图片转换128/512维度向量的两种做法
近期工作需要调研关于人脸转换向量存储到自家的数据库去做人脸识别,所以我在网上pick了两种关于人脸转换向量的两种简单做法,但是作为一个java开发工程师,对python的使用不是很精通,所以代码仅供参 ...
- 7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))
一:题目 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首先给出两个正整数N(≤1 ...
- 7-32 哥尼斯堡的“七桥问题” (25 分)(思路+详解+题目分析)两种做法任选其一
一:题目: 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-178 ...
- android 投屏 app 三星,两种支持三星Note10投屏到电脑的方法推荐
北京时间8月8日,三星在美国纽约召开发布会,发布了三星下半年的旗舰手机Galaxy Note 10系列. 三星Note10系列此次采用了后置4摄设计,在最新的DxO拍照评分中,Note 10+获得了1 ...
最新文章
- 西门子绿色数据中心的“新”境界
- shell实例第16讲:猜拳游戏
- windows10下同时安装两个mysql服务的解决办法
- Java项目问题_Java项目出现的问题01----学习
- 基于UDP高性能传输协议UDT
- 第一个鸿蒙程序“hello world“
- 2019最佳工作、平均年薪达百万!想入行,先看这10本书
- php采集器分析功能实现
- yii mysql 查询 类型转换_Yii2.0 API改造(返回数据库对应字段数据类型)
- 12、阈值分割基础理论
- JAVA一键获取文件名并对比Excel名单,看看谁没有交作业
- 永洪BI产品体验(一)数据源模块
- c语言 组合问题,c语言排列组合问题
- linux实用教程复习题,linux上机复习题(部分答案)
- 如何开启windows7快速启动栏(转)
- 迪杰斯特拉算法(dijkstra)_朴素版_堆优化版
- 华为机试HJ96:表示数字
- 计算机房间墙壁的布置,房间小怎么布置 小房间布置有妙招
- python hook pc微信_微信 电脑版 HOOK(WeChat PC Hook)- 定位dll获取数据和调用功能的地址...
- 词袋模型和词向量模型