Service Ability 原创

CHXI29
发布于 2021-6-4 15:17
7333浏览
0收藏

官方文档链接 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-concept-0000000000044457

基本概念

基于Service模板的Ability主要用于【后台运行任务】,【不提供】用户交互界面。Service是【单实例】的。在一个设备上,相同的Service只会存在一个实例。

回调方法


onStart()

该方法在【创建】Service【的时候调用,用于Service的初始化。在Service的整个生命周期只会调用一次,调用时传入的Intent应为空。


onCommand()

在Service【创建完成之后调用,该方法在客户端每次启动该Service时都会调用,用户可以在该方法中做一些调用统计、初始化类的操作。


onConnect​()

在【AbilityService 连接时调用】,该方法返回IRemoteObject对象,用户可以在该回调函数中生成对应Service的IPC通信通道,以便Ability与Service交互。Ability可以多次连接同一个Service,系统会缓存该Service的IPC通信对象,只有第一个客户端连接Service时,系统才会调用Service的onConnect方法来生成IRemoteObject对象,而后系统会将同一个RemoteObject对象传递至其他连接同一个Service的所有客户端,而无需再次调用onConnect方法。


onDisconnect​()

在Ability与绑定的Service断开连接调用


onStop()

在Service销毁时调用。Service应通过实现此方法来清理任何资源,如关闭线程、注册的侦听器等。

案例

在MainAbilitySlice的代码

public class MainAbilitySlice extends AbilitySlice {
    private static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0xFFFFF, "CHXI");
    @Override
    public void onStart(Intent intent) {

        Intent myIntent = new Intent();
        //设置操作
        Operation operation = new Intent.OperationBuilder()
                .withDeviceId("")
                //包名
                .withBundleName("com.chxi.servicestu")
                //全类名 或者 class文件
                .withAbilityName(ServiceAbility.class)
                .build();
        myIntent.setOperation(operation);
        //启动serviceAbility
        startAbility(myIntent);
       //1、创建连接Service回调实例

        IAbilityConnection connect = new IAbilityConnection() {
            @Override
            public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int i) {
                HiLog.info(label,"MyConnectAbilitySlice::ConnectDone");
                HiLog.info(label,""+i);

            }

            @Override
            public void onAbilityDisconnectDone(ElementName elementName, int i) {
                HiLog.info(label,"MyConnectAbilitySlice::DisconnectDone");
            }
        };
        //2、连接
       connectAbility(myIntent, connect);
       //3、断开连接
        disconnectAbility(connect);
        super.setUIContent(ResourceTable.Layout_ability_main);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

ServiceAbility代码


public class ServiceAbility extends Ability {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xFFFFF, "CHXI");
    // 创建自定义IRemoteObject实现类
     class MyRemoteObject extends LocalRemoteObject {
        private  int remoteNum =  0;
        MyRemoteObject(){
            remoteNum = 111;
            HiLog.info(LABEL_LOG, "ServiceAbility::MyRemoteObject");
        }

        public int getRemoteNum() {
            return remoteNum;
        }
    }

    // 把IRemoteObject返回给客户端
    @Override
    protected IRemoteObject onConnect(Intent intent) {
        HiLog.info(LABEL_LOG, "ServiceAbility::onConnect");
        return new MyRemoteObject();
    }

    @Override
    public void onStart(Intent intent) {
        HiLog.info(LABEL_LOG, "ServiceAbility::onStart");
        super.onStart(intent);
    }

    @Override
    public void onBackground() {
        super.onBackground();
        HiLog.info(LABEL_LOG, "ServiceAbility::onBackground");
    }

    @Override
    public void onStop() {
        super.onStop();
        HiLog.info(LABEL_LOG, "ServiceAbility::onStop");
    }

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



    @Override
    public void onDisconnect(Intent intent) {
        HiLog.info(LABEL_LOG, "ServiceAbility::onDisconnect");
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.

Service Ability-鸿蒙开发者社区

1、初始化service 调用 onStart
2、初始化完成后 调用 onCommand
3、连接服务与断开连接服务 最后调用stop之前,推到后台调用onbackground。

前台Service 代码 在serviceAbility里面的onstart()里面调用
//创建通知请求 设置通知id为1005
        NotificationRequest request = new NotificationRequest(1005);
        //创建普通通知
        NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent();
        //设置通知的标题和内容
        content.setTitle("Title").setText("Text");
        //创建通知内容
        NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);
        //设置通知
        request.setContent(notificationContent);

        keepBackgroundRunning(1005,request);
        HiLog.error(MyUtils.getLabel(), "ServiceAbility::startupForegroundService");
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
已于2021-6-7 15:57:12修改
收藏
回复
举报


回复
    相关推荐