@[TOC]
广播-broadcast

静态注册
1- 新建广播接收类:
2-在manifest中静态注册
例如这里注册了广播的启动指令为
com.example.BROADCAST

3-在activity中发送广播
注意andriod8.0以上需要显式的intent;

4-在广播接收器类中处理广播事件:

动态注册和取消注册广播
与静态注册过程的主要不同是不需要在manifest注册,在程序中执行。 发送广播与广播接收后处理与静态相同。
在程序中构建接收器对象。
构建intent过滤器,给intent过滤器添加指令内容。
然后使用注册接收器函数,第一个参数是接收器,第二个参数是过滤器。
相应的取消注册:

通知-notification


第一步构建通知管理器

建立通道,先判断安卓版本 1-创建通知通道对象mchannel 2-使用通知管理器来创建通知通道 新建通知构建对象,设置通知的提示图标,标题,内容,显示时间,是否点击后自动取消,设置点击通知后的intent(用于跳转activity,使用PendingIntent()绑定activity)最后.build();构建成功
还可以使用setStyle设置通知大图:

多任务和服务



handle实现异步
计数器例子
1-构建runnable线程对象,将需要执行的代码写在重写的run()方法中
2-使用handle执行这个runnable
3-在runnable中可以再次使用handle来执行runnable自身,达到循环调用的结果。
4-使用handle.removeCallbacks()来终止runnable的运行。

进度条例子
使用handle.obtainMessage,来直接获取handle的消息队列。
给message附一个参数arg1,handle发送该message
在handle中设置进度条参数为message传来的arg1

AsyncTask实现多任务
继承AsyncTask
使用.execute(1000)执行AsncTask,1000为传给onProgressUpdate的参数
在doInBackground()方法中可以获取到传来的这个参数1000,直接用integers[],获取。
该方法执行耗时任务,不可执行界面显示等操作。
使用publishProgress()发布进度,即传参给onProgressUpdate()


服务Service

服务的生命周期
通过intent传值,启动或者暂停服务。
intent中指明了程序的跳转,从this,到 Myservice.class
使用.startService()
跳转到MyService中先执行onCreate,再执行onStartCommand
注:.startService()可以多次启动,但是onCreate方法只在第一个服务有效,其他服务直接进入onStartCommand方法。

使用.stopService(),则执行service中的onDestroy()方法。
IntentService

使用startService(intent)启动intentService:
跳转到intentService中,执行onHandleIntent()的回调,
执行完毕后会自动执行onDestroy()方法来销毁服务。
这就是intentService的特点。

绑定型服务BindService
绑定型服务实现了访问者获取服务类中的数据,具体的实现是通过服务类返回Ibinder对象,而访问者程序可以直接获取到Inbind对象。

1-定义ServiceConnection 类实现程序与service的连接:
使用intent指明程序要绑定的服务。
使用bindService()方法,将intent,ServiceConnection 类带入。这里第三个参数,指的是绑定后的一些选项操作,这里直接使用了Context.BIND_AUTO_CREATE常量,意思是绑定后自动执行创建服务。
终止服务绑定只需要使用unbinderService()方法,传入连接对象参数。

在service中,定义继承Binder的MyBinder类,在MyBinder类构建getService方法,用于将MyBindService本身返回出去。 IBinder类在onBind()方法中可以被返回给访问程序,因此需要MyBinder类赋予给iBinder。
在访问程序中的服务连接建立那里就是获取IBinder的接口。
获取到的iBinder类因为是别处接口获得的,所以需要使用强制类型转换。
使用iBinder的getService()方法即可以拿到service本身,从而调佣service的一些方法
为安全起见,在取消绑定前,应该判断一下连接是否已经建立。

信使Messenger

Messager单向传输
在service中构建IncomingHandler 用于处理响应客户端发送来的消息。 使用信使Messager,来装载这个IncomingHandler ,在onBind()方法中,将信使携带的Binder传递给客户端。
在服务端当连接成功时,即可获取到服务端发送过来的Binder,构建信使。
构建message对象,构建Bundle存放消息,将Bundle放入message中,使用信使发送该message。
服务端对应的handle可以接到的信使传递来的消息。
整个流程,首先服务端与客户端绑定连接。服务端构建handler,用于消息的处理,使用信使messager携带handler,通过onBind()的接口将该handler赋予给客户端,客户端就可以指定一个信使messager携带该handle,向服务端r发送信息,实现客户端发送信息,而服务端完成handler响应。
服务端本身只是binder(binder、IBinder、handler可以视为类似的东西)与客户端是相通的接口,服务端的信使在接口处,只有Binder被传到客户端,在客户端由Binder重新构建出服务端的信使,从而实现向服务端发送消息并响应
Messager双向传输
双向传输的主要区别在于,在客服端向服务端发送message时,可以直接指派一个客户端自己的信使mMessager给服务端,服务端直接把消息封装传给信使mMessager,客户端接收到消息后进行handler处理。



