利用广播机制,实现程序的强制退出。

前面有篇博文,写到了一键退出,这里利用到了那里的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 利用广播实现程序的强制退出相关推荐

  1. 微信小程序合成海报_利用微信小程序中Canvas API来合成海报生成组件封装

    每个小程序成型后,一般都会选择生成带菊花码的海报分享出去来吸引更多的流量.下面来介绍下其他的一种实现方式吧 原理:主要利用微信小程序强大的Canvas API来合成,生成后可用wx.canvasToT ...

  2. ios12上滑关闭程序动画_苹果iOS 12.1.3应用强制退出后台动画再变

    IT 之家2 月 1 日消息   在去年 12 月 8 日,苹果推送了 iOS 12.1.2 版本,更新内容中有一条 " 推出了应用强制退出时的新动画 ",这个更新主要是为了避开高 ...

  3. Android退出程序(二)——利用广播机制

    概述: 基于上一篇博客<Android退出程序(一)--单例模式>的学习,我们知道了如何利用单例和循环遍历的方式来退出我们的应用程序.这篇博客则要从另一个角度来解决问题--广播.即是,接收 ...

  4. backgroundworker 导致程序无法退出_macOS技巧—六种方法强制退出无响应的程序

    Mac电脑由于开了好多的应用程序,会导致某些程序无响应,怎么都退不出去?那么如何将无响应的应用程序退出去呢?今天macdown小编给大家带来了实用好文macOS技巧-六种方法强制退出无响应的程序. m ...

  5. mac 强制退出程序_Mac OS系统如何强制退出应用程序

    Mac OS系统虽然非常稳定,但有时候也会受到不良APP影响,或者软件与系统不兼容等等,难免会遇到程序卡住,就需要强制退出这个程序了,下面是Mac OS里强制退出应用程序的六种方法. 使用键盘快捷键强 ...

  6. 强制退出Mac程序的六种方法

    1.使用键盘快捷键强制退出处于活跃状态的Mac程序 快捷键:Command+Option+Shift+Esc 这样按住一两秒钟,就可以强制退出当前程序了,算是最方便的一种方法. 2.打开强制退出程序窗 ...

  7. [mac]强制退出Mac程序的六种方法

    用电脑时间长了,难免会遇到程序卡住,风火轮狂转不停,没有任何相应等情况.可能是由于程序冲突.缓存不足或者一些bug等情况导致,这个时候我们就需要强制退出这个程序了,下面有六种在Mac系统中强制退出程序 ...

  8. mac怎么强制退出程序,强制退出Mac程序,mac 强制退出程序

    在Mac上运行软件时,可能会出现某个应用停止响应,并且无法正常退出该应用的情况,那么mac软件卡死了怎么办?mac如何强制退出程序?这篇文章为大家带来了多个关于mac 强制退出程序的方法,非常的实用, ...

  9. 苹果Mac怎样强制退出冻结的菜单栏应用程序?

    当Mac上的标准应用程序死机时,你可能知道如何使用命令+选项+转义来拉出强制退出应用程序窗口.碰巧的是,这不会为菜单栏应用程序提供执行相同操作的选项.苹果Mac如何强制退出菜单栏应用程序,一起来看看吧 ...

  10. 程序无响应 强制退出Mac程序的六种方法

    文章转自:http://tech.sina.com.cn/pc/2012-03-13/02102060513.shtml 电脑用的时间长了,难免会遇到程序卡死,风扇狂转不停,没有任何响应等情况.可能是 ...

最新文章

  1. C语言求m中n个数字的组合
  2. BZOJ3262: 陌上花开(cdq分治)
  3. Codeforces Testing Round #10 A. Forgotten Episode
  4. 用JS写了一个模拟串行加法器
  5. Java 递归创建目录
  6. 你对java的理解_面试官:谈谈你对Java的理解
  7. 不使用imrotate 的图像旋转实现
  8. 笔记本光驱接口怎么外接台式机硬盘?
  9. icp光谱仪的工作原理_ICP的工作原理
  10. 最低报酬率计算机公式,股票报酬率计算公式
  11. 方维o2o系统多通道支付的实现
  12. axios报错Error: Request body larger than maxBodyLength limit
  13. 微信小程序的版本更新机制是什么?
  14. 在MySQL中第一章选择题_北大青鸟第二学期 123章数据库选择题
  15. 打印ASCII码 c++
  16. 上海配眼镜(攻略) ,个人配镜经验总结,你不了解的这里都有!
  17. 华清远见重庆中心-JS技术总结
  18. c语言蟠桃记程序,HDU2013 蟠桃记
  19. javascript特效模拟marquee
  20. anfis matlab,这是一个anfis模糊神经网络代码,有个地方不懂想问问大家

热门文章

  1. Python中operator模块的操作
  2. Spring通过Gmail SMTP服务器MailSender发送电子邮件
  3. 基于Html5的移动端开发框架的研究
  4. Resource interpreted as Script but transferred with MIME type text/plain:
  5. 华为鸿蒙公测链接,华为鸿蒙系统2.0启动第二轮公测,新增6款nova机型
  6. django2.2 配置urls(亲测)
  7. predis如何实现phpredis的pconnect方法
  8. HTML5获取autoComplete属性:告诉浏览器是否记录之前的输入值
  9. Git的SourceTree添加授权添加用户名与密码
  10. jQuery的prev next