广播的最佳实践——实现强制下线功能(Android_Broadcast)...
关键词:Broadcast, 生命周期,继承
本项目基本思路:
1.先创建一个ActivityCollector类用于管理所有的活动;
2.然后创建一个BaseActivity类作为所有活动的父类:
父类功能有二:
其一,用于辅助统筹管理本项目的所有活动。调用ActivityCollector类的方法,如类中的onCreate和onDestroy方法,所有从父类派生出去的子类,在创建时会被加入ActivityCollector的数组activities里面,销毁时则会从里面被移除;用数组activities统筹本项目的活动,可以很容易实现销毁所有活动的功能;
其二,随后我们将重写本类的onResume和onPause方法,所有从父类派生出去的子类,在栈顶状态(onResume()方法执行之后的处于准备交互的状态)都会注册一个接收器,接收广播信息,收到广播信息后执行onReceive方法,弹出对话框,随后销毁所有活动,重新启动LoginActivity,实现强制下线;在失去栈顶位置的时候,则将接收器销毁;这样强制下线的功能就不会依附于任何的界面,不管是在程序的任何地方,只需要发出这样一条广播,就可以完成强制下线的操作了;
3.新建LoginActivity,作为登录界面,用户输入密码和账号,正确则通过跳转到MainActivity,失败则Toast提示;
4.MainActivity,简单的一个按钮,用于发送广播;
源码地址(码云): Lwp/AndroidDemo - 码云 Gitee.com
参考文献:《第一行代码(第2版)》
主要步骤:
先创建一个ActivityCollector类用于管理所有的活动:
右键包->new->Java Class:
![](https://yqfile.alicdn.com/img_e5a41d00e81f8f2ada9849861974d993.png)
![](https://yqfile.alicdn.com/img_e615f2d4a4e0812c72df0031582994dc.png)
然后创建一个BaseActivity类作为所有活动的父类:
![](https://yqfile.alicdn.com/img_455dea7925681b671904cec83df5a638.png)
本父类功能有二:
其一,用于辅助统筹管理本项目的所有活动。如类中的onCreate和onDestroy方法,所有从本类派生出去的子类,在创建时会被加入ActivityCollector的数组activities里面,销毁时则会从里面被移除;
其二,随后我们将重写本类的onResume和onPause方法,所有从本类派生出去的子类,在栈顶状态都会注册一个接收器,在失去栈顶位置的时候,则将接收器销毁;
新建LoginActivity:
![](https://yqfile.alicdn.com/img_8907dec777fb47bebb20bcae09c42876.png)
布局代码:
![](https://yqfile.alicdn.com/img_bdf9771769a8ec2e572a79fc85c5192e.png)
![](https://yqfile.alicdn.com/img_85a06754345b7809c83e1ecb1de2cde9.png)
布局预览图:
![](https://yqfile.alicdn.com/img_0457876a22871ce9792009b4a1bd8659.png)
LoginActivity代码:
![](https://yqfile.alicdn.com/img_50bbf810b2ea68dbdd27742abfd26d42.png)
![](https://yqfile.alicdn.com/img_e794c742d55cdfe5f919f2c8fa253064.png)
MainActivity的代码,这里不需要什么花里花俏的功能,只需要弄一个按钮实现强制下线的功能就可以了:
![](https://yqfile.alicdn.com/img_6b701126f9dc0d0b2adce9f7c6563944.png)
![](https://yqfile.alicdn.com/img_10d08bd3051e575bbb5344a10badb76e.png)
修改BaseActivity,动态注册一个广播接收器:重写本类的onResume和onPause方法,所有从本类派生出去的子类,在栈顶状态都会注册一个接收器,在失去栈顶位置的时候,则将接收器销毁;
![](https://yqfile.alicdn.com/img_0cf684e2473b8657ccab01646800fb8d.png)
![](https://yqfile.alicdn.com/img_f43eb5d05230ff252c6813259239023a.png)
最后将主活动设置为LoginActivity而不再是MainActivity:
![](https://yqfile.alicdn.com/img_518e35908fe4a4092cca711978f111b5.png)
最后上运行结果图:
密码或账号输入错误时弹出提示:
![](https://yqfile.alicdn.com/img_b4a9dadd36a58355f0d2849b24019e65.png)
输入正确,进入MainActivity:
![](https://yqfile.alicdn.com/img_5f3e013a47a9ce4a2d30e3e0955d7156.png)
点击按钮,弹出对话框,强制下线:
![](https://yqfile.alicdn.com/img_5ef2411bc73430fcdd5699a5626544a5.png)
广播的最佳实践——实现强制下线功能(Android_Broadcast)...相关推荐
- java 强制下线_广播的最佳实践——实现强制下线功能(Android_Broadcast)
关键词:Broadcast, 生命周期,继承 本项目基本思路: 1.先创建一个ActivityCollector类用于管理所有的活动: 2.然后创建一个BaseActivity类作为所有活动的父类: ...
- android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...
强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...
- Android通过广播实现强制下线功能
Android通过广播实现强制下线功能 我们首先定义一个activity集合类,在这个类里面主要添加三个方法,分别是 1.添加activity 2.删除activity 3.关闭所有activity ...
- Android开发(2) | 广播 Broadcast 的应用——强制下线功能
文章目录 功能简介 关闭所有活动 登陆界面 发送强制下线的广播 广播接收器 AndroidManifest.xml 运行结果 功能简介 强制下线功能只需要弹出一个对话框,让用户只能点击确定按钮,回到登 ...
- android#boardcast#广播实现强制下线功能
参考自<第一行代码>--郭霖 强制下线功能需要先关闭掉所有的活动(Activity),然后回到登录界面.先创建一个ActivityCollector类用于管理所有的活动,代码如下所示: p ...
- Android-浅谈广播机制,实现强制下线功能
首先,复习一下,什么是广播呢? 顾名思义,广播就像我们上学的时候每个班级里的喇叭一样,这些喇叭都是接入到学校的总的一个地方,比如说广播室啊什么的.一旦有什么通知,就会播放一条让全校师生都知道的广播.类 ...
- Java实现第二次登陆强制下线_Android登陆页面记住密码以及强制下线功能的实现...
这篇文章主要是巩固一下前面所学的SharedPreferences存储数据以及广播接收器.如果对这两个部分不熟悉的话可以先看一下Android数据存储(二)以及Android广播接收器(二)由于这篇文 ...
- android仿qq强制下线服务器,qq强制下线(实现一个类似QQ的强制下线功能)
qq强制下线(实现一个类似QQ的强制下线功能),哪吒游戏网给大家带来详细的qq强制下线(实现一个类似QQ的强制下线功能)介绍,大家可以阅读一下,希望这篇qq强制下线(实现一个类似QQ的强制下线功能)可 ...
- 仿QQ异地登录强制下线功能的实现
一,仿QQ异地登录强制下线功能 效果:同一个账号,最后一个登录的用户会把前一个登录后的用户顶掉,被迫下线! 1,剖析登录原理 登录的后台逻辑 准备一张账户信息表(账号,密码,是否禁用等字段) 查询账号 ...
最新文章
- EI:天大王灿+昆士兰郭建华揭示生物气溶胶是猪场耐药基因的重要传播途径
- 20162329 2017-2018-1 《程序设计与数据结构》第十一周学习总结
- hello cnblogs(从wordpress、收费空间到博客园)
- JVM实用参数(七)CMS收集器
- python 滑块验证码_python selenium 淘宝滑块验证码 问题
- 使用 iPerf 测试 Azure VM 之间的网速
- springboot很多以来jar包是在外部当时候,如何打dockerfile到阿里云
- c语言宏定义比较三个数大小,C语言中两个宏进行大小对比,其中一个没有定义,这种行为如何定义。...
- Webpack实战(五):轻松读懂Webpack如何分离样式文件
- Spring整合RabbitMQ
- A10负载均衡设备基础配置
- python获取gps_Python GPS模块:读取最新的GPS D
- 如何在EXCEL中只复制可见单元格(忽略隐藏行/列)
- Oracle + PlSql 下载安装配置
- windows10 中微信(UWP)版本不显示通知消息
- linux vim 修改 只读文件,linux下vi编辑只读文档无法保存的解决方法
- 中芯国际三季度营业收入创新高;德州仪器与德赛西威签署合作备忘录 | 全球TMT...
- 2月全球搜索引擎市场份额之争:百度战胜Google夺冠
- 量子前沿英雄谱|IonQ联合创始人兼首席技术官Jungsang Kim
- 什么是Ingress
热门文章
- jQuery 1.9使用$.support替代$.browser的使用方法
- sh脚本异常:bad interpreter: No such file or directory
- Flex 容器基本概念
- checkbox的常见问题
- 工作中Oracle常用的SQL
- C语言中struct, union, enum 三大复合数据类型
- openwrt开发过程简介
- .NET 将文本转换成语音 (转)
- 小宝机器人的储存容量_新iPad Pro储存越来越大:甚至到1T!您应该购买哪种存储容量呢?...
- 一个页面中多个window.onload = function(){}冲突问题解决思路