Android中的广播机制
2017-04-27 21:33
232 查看
一.Activity的四种启动模式
标准模式:standard:默认的启动模式,每次激活都会创建Activity实例
栈顶模式 , SingleTop: 假如要激活的Activity的实例刚好处于栈顶,则不需要创建实例
单任务模式, SingleTask :假如要激活的Activity在本任务栈有该实例,则不需要创建,处于该实例上面的Activity 对象要弹出栈, 单任务的Activity实例处于栈顶,实现与用户交互
单实例模式, SingleInstance : 单独开辟一个任务栈,来处理单实例的Activity
使用场景:
假如是临时的Activity,则采用标准模式,当Activity使用完,则关闭
对于项目中的导航界面或者主界面,因为要经常展示,所以设置单任务模式
对于栈顶模式的使用,假如经常自己刷新自己界面,则可以采用栈顶模式
对于单实例模式:一般该Activity会经常共享(比如浏览器Activity),或者Activity 创建起来耗时
二.Android广播机制
Activity 活动 services 服务 contentprovider内容提供者 broadcastreceiver广播接收器
1.广播机制的特点
广播的发送者不需要关心是否有人接受,广播的发送是系统级别的事件,广播的接收是应用级别的事件
系统默认开启了很多服务,通过服务的检测,最后以广播的形式发送事件,接受者需要订阅广播才能接收广播
广播的存在是为了解决应用之间的通信
2.广播的使用
1.首先,需要创建类,继承BroadcastReceiver,并重写onReceiver()方法
2.需要在清单文件中注册广播接收器组件(需要写在application内Activity外)
3.对于需要权限的广播,需要在清单文件中添加权限
4.当系统发出应用所订阅的广播时,应用会做出相应的处理,而此时,应用不需要处于运行界面.
三.使用广播接受者实现应用程序的卸载与安装监听
四.自定义发送与接收广播
1.创建一个按钮发送广播
2.在列表清单文件中注册
3.定义一个类来接收广播
五.有序广播与无序广播
有序广播 按广播接收者接收的优先级顺序发送广播,有序广播可以被拦截,终止,广播的信息可以被修改,是一种同步方式的广播 sendOrderBroadcast() //发有序广播
无序广播 发送广播是无序的,广播不能拦截,广播的数据不能修改,没有先后接收顺序,是一种异步方式的广播 sendBroadcast() //发无序广播
优先级配置 在注册广播接收者时配置: <intent-filter android:priority="1000"> ,范围 (1000) - (-1000)
有序广播案例
1.发送广播
2.第一个接收者
3.第二个接收者
4.第三个接收者
5.注意在清单文件中注册
标准模式:standard:默认的启动模式,每次激活都会创建Activity实例
栈顶模式 , SingleTop: 假如要激活的Activity的实例刚好处于栈顶,则不需要创建实例
单任务模式, SingleTask :假如要激活的Activity在本任务栈有该实例,则不需要创建,处于该实例上面的Activity 对象要弹出栈, 单任务的Activity实例处于栈顶,实现与用户交互
单实例模式, SingleInstance : 单独开辟一个任务栈,来处理单实例的Activity
使用场景:
假如是临时的Activity,则采用标准模式,当Activity使用完,则关闭
对于项目中的导航界面或者主界面,因为要经常展示,所以设置单任务模式
对于栈顶模式的使用,假如经常自己刷新自己界面,则可以采用栈顶模式
对于单实例模式:一般该Activity会经常共享(比如浏览器Activity),或者Activity 创建起来耗时
二.Android广播机制
Activity 活动 services 服务 contentprovider内容提供者 broadcastreceiver广播接收器
1.广播机制的特点
广播的发送者不需要关心是否有人接受,广播的发送是系统级别的事件,广播的接收是应用级别的事件
系统默认开启了很多服务,通过服务的检测,最后以广播的形式发送事件,接受者需要订阅广播才能接收广播
广播的存在是为了解决应用之间的通信
2.广播的使用
1.首先,需要创建类,继承BroadcastReceiver,并重写onReceiver()方法
public class Ipnumber extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "哈哈", Toast.LENGTH_SHORT).show();
SharedPreferences sp = context.getSharedPreferences("info", context.MODE_PRIVATE);
int ip = sp.getInt("ip", 0);
String number = getResultData();
if (number.startsWith("0")){
setResultData(ip+number);
Log.e("result",ip+number);
}
}
}
2.需要在清单文件中注册广播接收器组件(需要写在application内Activity外)
<!--注册IP号码接收器,订阅对外拨号的广播时间-->
<receiver android:name=".Ipnumber">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
3.对于需要权限的广播,需要在清单文件中添加权限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
4.当系统发出应用所订阅的广播时,应用会做出相应的处理,而此时,应用不需要处于运行界面.
三.使用广播接受者实现应用程序的卸载与安装监听
package com.example.it;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
/**
* Created by Administrator on 2017/4/27.
*/
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取事件类型
String result = intent.getAction();
if (intent.ACTION_PACKAGE_REMOVED.equals(result)){
Toast.makeText(context, "应用被卸载了", Toast.LENGTH_SHORT).show();
}else if (intent.ACTION_PACKAGE_ADDED.equals(result)){
Toast.makeText(context, "应用安装了", Toast.LENGTH_SHORT).show();
}
}
}
<!--注册监听应用的卸载与安装-->
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
四.自定义发送与接收广播
1.创建一个按钮发送广播
public void click(View view) {
//定义一个意图
Intent intent = new Intent();
//设置广播的事件名称
intent.setAction("com.itheima.haha");
//设置传递的数据
intent.putExtra("name","我是自定义广播");
//发送一条无序广播
sendBroadcast(intent);
}
2.在列表清单文件中注册
<receiver android:name=".Myrecever">
<intent-filter>
<action android:name="com.itheima.haha"/>
</intent-filter>
</receiver>
3.定义一个类来接收广播
//定义一个类用来接收广播
public class Myrecever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String name = intent.getStringExtra("name");
Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
}
}
五.有序广播与无序广播
有序广播 按广播接收者接收的优先级顺序发送广播,有序广播可以被拦截,终止,广播的信息可以被修改,是一种同步方式的广播 sendOrderBroadcast() //发有序广播
无序广播 发送广播是无序的,广播不能拦截,广播的数据不能修改,没有先后接收顺序,是一种异步方式的广播 sendBroadcast() //发无序广播
优先级配置 在注册广播接收者时配置: <intent-filter android:priority="1000"> ,范围 (1000) - (-1000)
有序广播案例
1.发送广播
public void click(View view) {
//设置意图,封装事件
Intent intent = new Intent();
//设置事件
intent.setAction("com.itheima.go");
//附加数据
intent.putExtra("go", "五一放假了");
//发送广播
sendOrderedBroadcast(intent,null,null,null,0,"注意安全",null);
}
2.第一个接收者
public class Itcast1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getStringExtra("go");
Log.e("result",""+action);
String resultData = getResultData();
setResultData(resultData+"总监强调");
Log.e("result","Itcast1"+resultData);
}
}
3.第二个接收者
public class Itcast2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getStringExtra("go");
Log.e("result",""+action);
String resultData = getResultData();
setResultData(resultData+"老师强调");
Log.e("result","Itcast2"+resultData);
}
}
4.第三个接收者
public class Itcast3 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getStringExtra("go");
Log.e("result",""+action);
String resultData = getResultData();
Log.e("result","Itcast3"+resultData);
}
}
5.注意在清单文件中注册
//注册广播接受者
<receiver android:name=".Itcast1">
<intent-filter>
<action android:name="com.itheima.go"/>
</intent-filter>
</receiver>
<receiver android:name=".Itcast2">
<intent-filter>
<action android:name="com.itheima.go"/>
</intent-filter>
</receiver>
<receiver android:name=".Itcast3">
<intent-filter>
<action android:name="com.itheima.go"/>
</intent-filter>
</receiver>
相关文章推荐
- android 广播机制
- Android 广播机制---BroadCast
- Android 2.2完全退出程序, 使用广播机制
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- 图解 Android 广播机制
- android广播机制初步学习——短信黑名单
- android 广播机制
- Android 广播机制
- 在通过android的广播机制拦截短信的实现过程中遇到的问题
- Mars Android视频学习笔记——01_21/22_广播机制
- android学习笔记——图解 Android 广播机制
- Android开发之广播机制进阶
- android2.2完全退出程序, 使用广播机制
- Android2.2使用广播机制完全退出程序
- Android--广播机制
- android 广播机制
- [每天学点Android开发]Android广播事件机制及应用
- android 广播机制Broadcast、BroadcastReceiver用法解读
- android广播机制初步学习——短信黑名单