服务service

1. 异步处理消息

  1. Message
    1. 用于不同线程之间传递消息,可以携带少量信息
  2. Handler
    1. 用于发送和处理消息
    2. sendmessage()方法发送消息
    3. handleMessage()方法处理消息
  3. MessageQueue
    1. 用于存储Handler发送的消息
    2. 每个线程只有一个MessageQueue对象
  4. Looper
    1. 是一个监控MessageQueue的对象
    2. 它会无限循环,当消息队列中有消息就取出,并传递到Handler的handlemessage()方法中
    3. 每个线程只有一个Looper对象
  5. 示意图

在这里插入图片描述

2. 使用AsyncTask

  1. 原理和异步处理消息机制完全相同,但是Android做了封装
  2. 是一个抽象类,需要子类继承
  3. 子类继承AsyncTask时,需要指定三个泛型参数
    1. Params 在执行AsyncTask时需传入的参数
    2. Progress 显示当前进度单位
    3. Result 任务完成时,返回值类型
  4. 定制任务时需要重写的几个方法
    1. onPreExecute()
    1. 在任务开始前执行
    2. 比如显示一个进度条对话框等
2. doInBackground(Params...)
  1. 这个方法中所有代码都会在子线程运行
  2. 应该在这个方法中处理耗时任务
  3. 这个方法不能进行UI操作(更新ui)
3. onProgressUpdate(Progress...)
  1. 调用publishProgress(Progress...)方法后,onProgressUpdate(Progress...)方法很快就被调用
  2. 这个方法可以对UI更新
4. onPostExecute(Result)
  1. 任务执行完毕后并通过return返回的时候调用
  2. 比如关闭进度条对话框

3. 服务的基本用法

  1. service几个常用方法
    1. onCreate()
    1. 创建服务时调用
    2. 当已经创建,不调用,只调用onStartCommand()
2. onStartCommand()
  1. 启动服务时调用
3. onDestory()
  1. 销毁服务时调用
4. startService() 和stopService() 都是定义在Context类中,在活动中直接调用这两个方法
5. 在service中的任一个位置调用stopSelf()方法,服务停止

4. 服务和活动通信

  1. 通过Binder对象管理service
  2. 创建一个ServiceConnection匿名对象
    1. 重写onServiceConnected()方法
    2. 重写onServiceDisconnected()方法
  3. 当服务和活动绑定后,可以调用该服务中的Binder提供的方法
  4. 绑定,先构建Intent,然后调用bindService() 将服务和活动绑定,bindService()方法接受三个参数
    1. 第一个,Inetent对象
    2. 第二个,创建的ServiceConnection实例,
    3. 第三个,标志位
  5. 接触绑定,调用unbindservice(),参数为ServiceConnection

5. 服务的生命周期

  1. startService()调用,如果没有创建会先执行onCreate(),然后执行onStartCommand(),如果创建了直接执行onStartCommand()
  2. 调用stopService() 和 stopSelf() 服务停止
  3. 调用bindService()获得一个长久连接,回调服务中的onBind()方法
  4. 回调可以获取onBind()返回的IBinder对象,可以一直通信,直到调用unbindService()方法,断开连接,销毁服务。
  5. 当一个服务既调用 startService()又调用 bindService(),需要同时调用stopService()和unbindservice()方法才会销毁服务

6. 前台服务

  1. 需要权限
  1. Android 8 以后需要添加通道
    https://blog.csdn.net/fusu2178192/article/details/125969079

public void onCreate() {
super.onCreate();
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
String CHANNEL_ID = “channel_id_01”;
String CHANNEL_NAME = “channel_name_test”;
int NOTIFICATION_ID = 1;
NotificationChannel notificationChannel;
Notification notification;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationChannel = new NotificationChannel(CHANNEL_ID,
CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setShowBadge(true);
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.createNotificationChannel(notificationChannel);

    notification = new NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("This is content title")
            .setContentText("This is content text")
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
            .setContentIntent(pi)
            .build();
} else {
    notification = new Notification.Builder(this)
            .setContentTitle("This is content title")
            .setContentText("This is content text")
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
            .setContentIntent(pi)
            .build();
}
startForeground(1, notification);

}

7. Download demo

  1. 出现下载超过数据总量
  2. pause()之后,再次下载
  3. 原因:断点下载,拼接request head 符号使用错误,导致获取全部数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti7是一个基于Spring Boot的开源工作流引擎,它提供了一系列的服务来支持工作流的实现。其中,大服务(Service)是Activiti7中的一种重要的服务类型,它承担了很多核心功能。下面我们来详细介绍一下Activiti7大服务的各种类型及其作用。 1. Identity Service Identity Service是Activiti7中的一个重要服务,它提供了用户和组的管理功能。通过Identity Service,我们可以创建、删除、更新用户和组,以及查询用户和组的信息。在Activiti7中,用户和组是与任务和流程实例相关联的,因此Identity Service对于工作流的实现非常关键。 2. Runtime Service Runtime Service是Activiti7中的另一个重要服务,它提供了流程实例的管理功能。通过Runtime Service,我们可以启动、暂停、恢复、删除流程实例,以及查询流程实例的状态。在Activiti7中,每个流程实例都有一个唯一的标识符,我们可以通过Runtime Service来管理这些流程实例。 3. Task Service Task Service是Activiti7中的一个重要服务,它提供了任务的管理功能。通过Task Service,我们可以创建、完成、删除任务,以及查询任务的信息。在Activiti7中,任务是流程实例中的一个环节,它需要被分配给具体的用户或组去执行。 4. Form Service Form Service是Activiti7中的一个服务,它提供了表单的管理功能。通过Form Service,我们可以查询、创建、更新和删除表单。在Activiti7中,表单是与任务和流程实例相关联的,它可以用来展示和收集用户输入的数据。 5. History Service History Service是Activiti7中的一个服务,它提供了历史数据的管理功能。通过History Service,我们可以查询已经完成的流程实例、任务和变量的历史数据。在Activiti7中,历史数据包括流程实例的启动时间、结束时间,任务的创建时间、完成时间,以及变量的修改历史等信息。 6. Management Service Management Service是Activiti7中的一个服务,它提供了管理功能。通过Management Service,我们可以查询Activiti7的配置信息,管理数据库表,以及执行一些系统级别的操作。在Activiti7中,Management Service需要有管理员权限才能使用。 总之,Activiti7大服务是Activiti7引擎的核心组成部分,它提供了许多重要的功能,包括用户和组的管理、流程实例的管理、任务的管理、表单的管理、历史数据的管理以及管理功能等。这些服务使得Activiti7成为了一个功能强大、易于使用的工作流引擎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值