专栏首页C++核心准则原文翻译自学HarmonyOS应用开发(56)- 用Service保证应用在后台持续运行

自学HarmonyOS应用开发(56)- 用Service保证应用在后台持续运行

秒表程序的功能当然是计时,但是Harmony应用的默认动作是切到后台之后程序会退出,无法实现连续计时。首先来看效果视频:

创建Service类

首先创建一个Ability的子类StopWatchService:

public class StopWatchService extends Ability {
    private static final int NOTIFICATION_ID = 0XD0000002;
    private static final String TAG = StopWatchService.class.getSimpleName();
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0x00209, TAG);
    private static final String DESCRIPTOR = "xwg.harmony.stopwatch.StopWatchService";

    @Override
    public void onStart(Intent intent) {
        HiLog.info(LABEL_LOG, "StopWatchService.onStart!");
        startForeground();
        super.onStart(intent);
    }

    @Override
    public void onCommand(Intent intent, boolean restart, int startId) {
        HiLog.info(LABEL_LOG, "StopWatchService.onCommand!");
        super.onCommand(intent, restart, startId);
    }

    @Override
    public IRemoteObject onConnect(Intent intent) {
        HiLog.info(LABEL_LOG, "StopWatchService.onConnect!");
        return remoteAgentStub;
    }

    @Override
    public void onDisconnect(Intent intent) {
        HiLog.info(LABEL_LOG, "StopWatchService.onDisconnect!");
        super.onDisconnect(intent);
    }

    @Override
    public void onStop() {
        HiLog.info(LABEL_LOG, "StopWatchService.onStop()<<<<<<<<<<<<<<<<<!");
        super.onStop();
        cancelBackgroundRunning();
    }

    private void startForeground() {
        NotificationRequest request = new NotificationRequest(NOTIFICATION_ID).setTapDismissed(true);
        NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent();
        content.setTitle("秒表服务").setText("前台服务运行中...");
        NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(
                content);
        request.setContent(notificationContent);
        keepBackgroundRunning(NOTIFICATION_ID, request);
    }
}

关于重写的几个方法的详细信息,请参照文后链接【创建Service】;startForground和cancelBackgroundRunning方法用于开启和关闭前台Service模式,具体说明请参照文后链接【前台Service】,这里不再一一赘述。

注册Service类

修改config.json文件,增加StopWatchService相关内容。

"module": {
  "abilities": [
    {
      "backgroundModes": [
        "dataTransfer",
        "location"
      ],
      "name": "xwg.harmony.stopwatch.StopWatchService",
      "icon": "$media:icon",
      "description": "$string:stopwatchservice_description",
      "type": "service",
      "visible": true
    }
  ],
}

最主要的是type信息。

启动Service

在需要启动StopWatchService的画面中调用下面的startLocalService方法即可启动Service。两个常量就是我们启动StopWatchService时需要的参数。

private static final String LOCAL_BUNDLE = "xwg.harmony.stopwatch";
private static final String FOREGROUND_SERVICE = "StopWatchService";

private void startLocalService(String bundleName, String serviceName) {
    Intent intent = getLocalServiceIntent(LOCAL_BUNDLE, FOREGROUND_SERVICE);
    startAbility(intent);
}

private Intent getLocalServiceIntent(String bundleName, String serviceName) {
        Operation operation = new Intent.OperationBuilder().withDeviceId("")
                .withBundleName(bundleName)
                .withAbilityName(serviceName)
                .build();
        Intent intent = new Intent();
        intent.setOperation(operation);
        return intent;
    }

具体说明请参照文后链接【启动Service】。

参考代码

完整代码可以从以下链接下载:

https://github.com/xueweiguo/Harmony/tree/master/StopWatch

参考资料:

Service Ability基本概念

https://developer.harmonyos.com/cn/docs/documentation/doc-

guides/ability-service-concept-0000000000044457

创建Service

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-creating-0000000000044464

前台Service

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-foreground-0000000000044473

启动Service

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-starting-0000000000044465

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自学HarmonyOS应用开发(57)- 与Service进行交互

    构建自己的Connection类 StopWatchServiceConnection类的主要功能有两个:一是接受连接成功通知并获取服务端传过来的用于通信的IR...

    面向对象思考
  • HarmonyOS简介

    前两天,华为发布了HarmonyOS 2.0,俺也赶个时髦,给大家简单介绍下HarmonyOS。

    xiangzhihong
  • 自学HarmonyOS应用开发(61)- 使用异步派发任务后台更新地图数据

    当第一次表示某地的地图数据时,由于数据需要从网络下载,因此会造成初次表示时间过长而影响响应速度的问题。我们使用异步派发任务解决这个问题。先看显示效果:

    面向对象思考
  • HarmonyOS-对Android开发者也太友好了吧

    2020年9月10日,华为消费者业务软件部总裁王成录又一次站在了松山湖华为开发者大会的主舞台上。今年,他带来了万众瞩目的华为鸿蒙HarmonyOS2.0...

    Android扫地僧
  • 技术分析 | HarmonyOS到底是不是Android套皮?

    最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵的不可开交。

    刘盼
  • 程序员看华为HarmonyOS首发

    HarmonyOS代码正式开源,9月10日下午朋友圈散布着这条消息,科技圈炸锅了。各种声音的都有,我也挺好奇的,目前Android、iOS一统江湖,Harmon...

    马上就说
  • HarmonyOS与Android的全面对比

    第二是我个人非常看好鸿蒙系统的未来,清楚明白华为和一些民族企业担负的责任和国人的期待,虽然带着一些民族感情;鸿蒙刚发布的时候自己是非常激动的,但是后来项目太忙一...

    肉眼品世界
  • 自学鸿蒙应用开发(41)- 真机调试之准备调试证书

    启动DevEco Stduio之后,通过主菜单选择Build->Generate Key and CSR。

    面向对象思考
  • 【第22期】HarmonyOS应用开发(基础篇)

    这不就是说,以后华为手机都是鸿蒙系统了嘛?鸿蒙还发出了一条视频,视频中显示2021年6月2号将开启鸿蒙操作系统及华为全场景新品发布会。预计现在支持EMUI11升...

    siberiawolf
  • 十问华为HarmonyOS:开源一个月,开发者生态建设进度如何?

    基础软件的开源面临着非常大的挑战,除了技术研发困难重重,开源生态和社区的建设更是难上加难。9 月 10 日,在华为开发者大会 2020 上,华为消费者业务 CE...

    深度学习与Python
  • 【HarmonyOS 专题】01 基础 Mac 环境安装配置

    HarmonyOS 已于 2020 年 12 更新到 2.0 版本;和尚周围的人都在学习和研究,和尚也想学习一下;今天和尚从 0 开始学习,第一步简单介绍基础...

    阿策小和尚
  • Re:从零开始的鸿蒙开发教程

    HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS...

    yuanyi928
  • 搭建鸿蒙编译环境(VMware+Linux)

    分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发任务和传输数据。分布式软总线示意图见。

    跋扈洋
  • 抢先学鸿蒙(HarmonyOS)2.0,你就是下一个大咖!

    2020年9月10日,华为开发者大会发布了鸿蒙(HarmonyOS)2.0。HarmonyOS是全场景操作系统。也就是说,从理论上,HarmonyOS可以在任何...

    蒙娜丽宁
  • 带你了解鸿蒙开发基本流程

    2020年9月10号,鸿蒙2.0(HarmonyOS 2.0)系统正式发布,鸿蒙2.0面向应用开发者发布Beta版本,

    Python进击者
  • 我的HarmonyOS实战——鸿蒙系统初定义

    鸿蒙并不是一个单纯的手机操作系统,而是手机+智能设备的总称。可以安装在包括手机、手表、无人机等很多设备上。

    天道Vax的时间宝藏
  • 前端视角看HarmonyOS

    公元 2021 年 6 月 2 日,【 HarmonyOS2.0 】正式发布,以 JavaScript 作为 IoT 应用开发的架构语言,这是继 SpaceX ...

    公众号@魔术师卡颂
  • 鸿蒙 DevEco Studio升级更新、新特性(新设备、布局预览)

      近来一段时间在忙工作上的事,对鸿蒙的文章很久没有更新了,而鸿蒙之前的开发者文档中说明了会在近期更新DevEco Studio的版本,当版本更新之后肯定会增加...

    晨曦_LLW
  • 华为回应:谷歌改用AAB格式 HarmonyOS无影响

    谷歌方面曾于日前宣布(再见,APK, 你好,AAB !),Google Play 将从 2021 年 8 月开始要求新发布的应用程序以 Android App ...

    开发者技术前线

扫码关注云+社区

领取腾讯云代金券