Service

Service是一个后台运行的组件,执行长时间运行且不需要用户交互的任务,即使应用被销毁也依然可以工作。

App1

App1中定义了Service:

f8054190f7de

Service定义

App2

要在App2中启动App1的服务,这里在App2的界面中定义了两个按钮(启动服务和停止服务),分别控制App1中Service的启动和停止。

需要启动Service时,首先定义一个Intent,通过显示Intent的方式启动,具体如下:Intent serviceIntent = new Intent();

//这里ComponentName的第一个参数为App1所在的Package,即前面代码中提到的package com.example.startservicefromanotherapp,第二个参数为Service所在的类名,可以使用绝对路径来指出(com.example.startservicefromanotherapp.AppService)。

serviceIntent.setComponent(new ComponentName("com.example.startservicefromanotherapp", "com.example.startservicefromanotherapp.AppService"));

接着在需要启动Service的地方启动Service即可。

f8054190f7de

有一点值得注意:

在Android8.0以后的版本中直接使用startService()启动服务会出错,因为Android8.0不再允许后台service直接通过startService的方式启动,该方法会引发IllegalStateException错误,新的 Context.startForegroundService() 函数将启动一个前台服务,但即使在后台运行,系统也允许调用Context.startForegroundService() ,但应用必须在创建服务后的5s内调用该服务的 startForeground() 方法。

因此可以对代码进行如下处理即可:

f8054190f7de

写在最后:文章是在学习过程中做的学习笔记,同时与志同道合者分享,文章内容均经过我自己实验证实可行,如有问题欢迎留言,很高兴一起交流讨论,共同进步!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐