l l Broadcast Receiver Intent Androidon ReceiveIntent Broadcast
一般用法 l l 注册Broadcast. Receiver 广播Intent Android通过调用on. Receive()方法将Intent转 发给相应的Broadcast. Receiver 在on. Receiver中处理事件
注册 l 静态 l l l Android. Manifest. xml <receiver>、<intent-filter> 动态 l register. Receiver()
<receiver> 格式 <receiver android: enabled=["true" | "false"] android: exported=["true" | "false"] android: icon="drawable resource" android: label="string resource" android: name="string" android: permission="string" android: process="string" > … </receiver>
<intent-filter> l 在<receiver>内部指定
动态注册 l l l 创建一个Intent. Filter 创建一个Broadcast. Receiver 用register. Receiver()注册Broadcast. Receiver l l l Local. Broadcast. Manager Context 调用un. Register. Receiver()来取消注册
事件分发 l l on. Receive()返回之前,Receiver不能认为是 有效的 通常Broadcast. Receiver不能启动异步操作 l 显示对话框、通过start. Activity. Fo. Result启动Activity
有序广播 l void send. Ordered. Broadcast(…)
返回结果 l l get. Result. Data set. Result. Data
Sticky广播 l Sticky Intent由Android缓存 l l 当Broadcast. Receiver动态注册时 l l 新的Intent覆盖老的 符合Intent. Filter要求的缓存Sticky Intent广播给 Broadcast. Receiver 一个符合要求的Sticky Intent返回给调用者 void send. Sticky. Broadcast(…) 发送Sticky Intent的必须要有 BROADCAST_STICKY权限
远程接口例子 interface Key. Generator { String get. Key(); }
多线程 l l l Android的UI线程 Async. Task Handler
Java的多线程 l l l Thread Runnable http: //docs. oracle. com/javase/tutorial/ essential/concurrency/threads. html
改进方案 l l 在后台线程执行任务,但是在UI线程更新界面 Android提供了几个方法可以保证在UI线程运 行 l l boolean View. post(Runnable action) void Activity. run. On. Ui. Thread(Runnable action)
Async. Task class Async. Task<Params, Progress, Result> {. . . } l l l Params: 后台 作使用的类型 Progress: 指示进度使用的类型 Result: 结果的类型
Async. Task l void on. Pre. Execute() l l Result do. In. Background (Params. . . params) l l l 在后台线程执行 可能调用void publish. Progress(Progress. . . values) l l 在UI线程执行,do. In. Background()之前执行 响应publish. Progress() void on. Post. Execute (Result result) l 在do. In. Background()之后执行
Handler架构
Handler架构
Handler架构
Handler架构
Handler架构
- Slides: 61