安卓开发(二)中间层应用、后台应用与多任务处理机制

目录

@[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的运行。 0 在这里插入图片描述 在这里插入图片描述

进度条例子

使用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处理。

在这里插入图片描述 在这里插入图片描述

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏鸭!

打开支付宝扫一扫,即可进行扫码打赏哦