android 程序退出广播,android 利用广播实现程序的强制退出
利用广播机制,实现程序的强制退出。
前面有篇博文,写到了一键退出,这里利用到了那里的ActivityCollector的集合和BaseActivity
功能:打开程序后,先登录,登录成功后,进入主页面,主页面有个按钮,点击后弹出窗口,用户点击 “是”之后退出程序
1、ActivityCollectorpackage com.yuanlp.forceexit;
/**
* Created by 原立鹏 on 2017/6/28.
*/
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* activity集合
*/
public class ActivityCollector {
public static List activityList=new ArrayList<>();
public static void addActivity(Activity activity){
activityList.add(activity);
}
public static void remove(Activity activity){
activityList.remove(activity);
}
public static void finishAll(){
for (Activity activity:activityList){
if (!activity.isFinishing()){ //判断activity是否销毁
activity.finish(); //销毁activity
}
}
}
}
2、BaseActivity 作为后面activity的父类,继承自AppComapActivity
package com.yuanlp.forceexit;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
/**
* Created by 原立鹏 on 2017/6/28.
*/
public class BaseActivity extends AppCompatActivity{
private MyForceExitReceiver receiver; //声明一个自己的广播接收者内部类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
/**
* 在activity处于返回栈顶,即处于焦点时,注册一个广播接收者
*/
public void onResume(){
super.onResume();
IntentFilter intentFilter=new IntentFilter(); //实例化一个intent过滤器
intentFilter.addAction("com.yuanlp.exit.FORCEXIT"); //只关心自己想要的广播
receiver=new MyForceExitReceiver();
registerReceiver(receiver,intentFilter); //动态注册广播
}
public void onPause(){ //当当前activity被弹出框占用时,解除注册
super.onPause();
if (receiver!=null){
unregisterReceiver(receiver);
receiver=null;
}
}
public void onDestroy(){
super.onDestroy();
ActivityCollector.finishAll();
}
/**
* 一个广播接收者,接收到广播后,弹出框提示用户重新登录,强制退出
*/
private class MyForceExitReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, final Intent intent) {
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle("warning");
builder.setMessage("你被强制退出,请重新登录");
builder.setCancelable(false); //禁止用户取消这个弹框
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCollector.finishAll(); //销毁所有活动
Intent intent=new Intent(context,LoginActivity.class); //跳转至登录界面
context.startActivity(intent);
}
});
builder.show();
}
}
}
3、LoginActivity 登录成功后,跳转到MainActivity界面。这里要在AndroidManifext.xml设置为这个activity是launcher,即打开后的第一个界面package com.yuanlp.forceexit;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class LoginActivity extends BaseActivity {
private EditText mName;
private EditText mPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mName = (EditText) findViewById(R.id.et_name);
mPassword = (EditText) findViewById(R.id.et_password);
}
public void login(View view){
String name=mName.getText().toString().trim();
String password=mPassword.getText().toString().trim();
if ("admin".equals(name)&&"123456".equals(password)){
Intent intent=new Intent(this,MainActivity.class);
startActivity(intent);
}
}
}
4、activity_login.xml 简单的一个LinearLayout,vertical排版,里面放了2个水平布局的LinearLayout,分别放一个用户名和密码的EditText。最下方一个button,实现登录方法<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.yuanlp.forceexit.LoginActivity">
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
android:id="@+id/et_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="账号"
android:inputType="textPersonName"/>
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
android:id="@+id/et_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="密码"
android:inputType="textPersonName"/>
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="login"
android:text="Button"/>
5、MainActivity
里面主要的是一个button的方法,实现发送广播。package com.yuanlp.forceexit;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void exit(View view){
Intent intent=new Intent("com.yuanlp.exit.FORCEXIT");
sendBroadcast(intent); //发送广播
}
}
6、activity_main.xml<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.yuanlp.forceexit.MainActivity">
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="exit"
android:text="强制退出"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="126dp"/>
android 程序退出广播,android 利用广播实现程序的强制退出相关推荐
- 微信小程序合成海报_利用微信小程序中Canvas API来合成海报生成组件封装
每个小程序成型后,一般都会选择生成带菊花码的海报分享出去来吸引更多的流量.下面来介绍下其他的一种实现方式吧 原理:主要利用微信小程序强大的Canvas API来合成,生成后可用wx.canvasToT ...
- ios12上滑关闭程序动画_苹果iOS 12.1.3应用强制退出后台动画再变
IT 之家2 月 1 日消息 在去年 12 月 8 日,苹果推送了 iOS 12.1.2 版本,更新内容中有一条 " 推出了应用强制退出时的新动画 ",这个更新主要是为了避开高 ...
- Android退出程序(二)——利用广播机制
概述: 基于上一篇博客<Android退出程序(一)--单例模式>的学习,我们知道了如何利用单例和循环遍历的方式来退出我们的应用程序.这篇博客则要从另一个角度来解决问题--广播.即是,接收 ...
- backgroundworker 导致程序无法退出_macOS技巧—六种方法强制退出无响应的程序
Mac电脑由于开了好多的应用程序,会导致某些程序无响应,怎么都退不出去?那么如何将无响应的应用程序退出去呢?今天macdown小编给大家带来了实用好文macOS技巧-六种方法强制退出无响应的程序. m ...
- mac 强制退出程序_Mac OS系统如何强制退出应用程序
Mac OS系统虽然非常稳定,但有时候也会受到不良APP影响,或者软件与系统不兼容等等,难免会遇到程序卡住,就需要强制退出这个程序了,下面是Mac OS里强制退出应用程序的六种方法. 使用键盘快捷键强 ...
- 强制退出Mac程序的六种方法
1.使用键盘快捷键强制退出处于活跃状态的Mac程序 快捷键:Command+Option+Shift+Esc 这样按住一两秒钟,就可以强制退出当前程序了,算是最方便的一种方法. 2.打开强制退出程序窗 ...
- [mac]强制退出Mac程序的六种方法
用电脑时间长了,难免会遇到程序卡住,风火轮狂转不停,没有任何相应等情况.可能是由于程序冲突.缓存不足或者一些bug等情况导致,这个时候我们就需要强制退出这个程序了,下面有六种在Mac系统中强制退出程序 ...
- mac怎么强制退出程序,强制退出Mac程序,mac 强制退出程序
在Mac上运行软件时,可能会出现某个应用停止响应,并且无法正常退出该应用的情况,那么mac软件卡死了怎么办?mac如何强制退出程序?这篇文章为大家带来了多个关于mac 强制退出程序的方法,非常的实用, ...
- 苹果Mac怎样强制退出冻结的菜单栏应用程序?
当Mac上的标准应用程序死机时,你可能知道如何使用命令+选项+转义来拉出强制退出应用程序窗口.碰巧的是,这不会为菜单栏应用程序提供执行相同操作的选项.苹果Mac如何强制退出菜单栏应用程序,一起来看看吧 ...
- 程序无响应 强制退出Mac程序的六种方法
文章转自:http://tech.sina.com.cn/pc/2012-03-13/02102060513.shtml 电脑用的时间长了,难免会遇到程序卡死,风扇狂转不停,没有任何响应等情况.可能是 ...
最新文章
- C语言求m中n个数字的组合
- BZOJ3262: 陌上花开(cdq分治)
- Codeforces Testing Round #10 A. Forgotten Episode
- 用JS写了一个模拟串行加法器
- Java 递归创建目录
- 你对java的理解_面试官:谈谈你对Java的理解
- 不使用imrotate 的图像旋转实现
- 笔记本光驱接口怎么外接台式机硬盘?
- icp光谱仪的工作原理_ICP的工作原理
- 最低报酬率计算机公式,股票报酬率计算公式
- 方维o2o系统多通道支付的实现
- axios报错Error: Request body larger than maxBodyLength limit
- 微信小程序的版本更新机制是什么?
- 在MySQL中第一章选择题_北大青鸟第二学期 123章数据库选择题
- 打印ASCII码 c++
- 上海配眼镜(攻略) ,个人配镜经验总结,你不了解的这里都有!
- 华清远见重庆中心-JS技术总结
- c语言蟠桃记程序,HDU2013 蟠桃记
- javascript特效模拟marquee
- anfis matlab,这是一个anfis模糊神经网络代码,有个地方不懂想问问大家
热门文章
- Python中operator模块的操作
- Spring通过Gmail SMTP服务器MailSender发送电子邮件
- 基于Html5的移动端开发框架的研究
- Resource interpreted as Script but transferred with MIME type text/plain:
- 华为鸿蒙公测链接,华为鸿蒙系统2.0启动第二轮公测,新增6款nova机型
- django2.2 配置urls(亲测)
- predis如何实现phpredis的pconnect方法
- HTML5获取autoComplete属性:告诉浏览器是否记录之前的输入值
- Git的SourceTree添加授权添加用户名与密码
- jQuery的prev next