Service——(3)向后台Service发送工作请求
本文始发于github,由于文内部分链接使用的是相对路径,如果访问不到,请移步github项目内阅读即可正常访问。原文(英文)地址上一篇文章介绍了如何创建一个JobIntentService类.这篇文章将介绍如何通过一个Intent来触发JobIntentService去执行一个操作,这个Intent中也可以用于JobintentService执行任务(操作)的一些数据。创建工作请求并将其发...
本文始发于github,由于文内部分链接使用的是相对路径,如果访问不到,请移步github项目内阅读即可正常访问。
上一篇文章介绍了如何创建一个JobIntentService
类.这篇文章将介绍如何通过一个Intent
来触发JobIntentService
去执行一个操作,这个Intent
中也可以用于JobintentService
执行任务(操作)的一些数据。
创建工作请求并将其发送到JobIntentService
为了创建一个工作请求并将其发送给JobIntentService
,我们需要创建一个Intent
并JobIntentService
通过调用enqueueWork()
将其加入工作队列。你还可以向Intent
中添加一些数据以提供给JobIntentService
去执行操作。您还可以选择将数据添加到Intent
(以Intent extras
的形式)以供JobIntentService
进行任务处理。有关创建Intent的更多信息,请阅读Intent和IntentFilters——概述中的构建Intent部分。
下面的代码段演示了这个过程:
1:为名为RSSPullService
的JobIntentService
类创建一个Intent
:
-
kotlin
/* * Creates a new Intent to start the RSSPullService * JobIntentService. Passes a URI in the * Intent's "data" field. */ serviceIntent = Intent().apply { putExtra("download_url", dataUrl) }
-
java
/* * Creates a new Intent to start the RSSPullService * JobIntentService. Passes a URI in the * Intent's "data" field. */ serviceIntent = new Intent(); serviceIntent.putExtra("download_url", dataUrl));
2:调用enqueueWork()
-
kotlin
private const val RSS_JOB_ID = 1000 RSSPullService.enqueueWork(context, RSSPullService::class.java, RSS_JOB_ID, serviceIntent)
-
java
// Starts the JobIntentService private static final int RSS_JOB_ID = 1000; RSSPullService.enqueueWork(getContext(), RSSPullService.class, RSS_JOB_ID, serviceIntent);
注意你可以在Activity
或者Fragment
的任何地方发送这个请求(Request
)。比如,如果你需要先获取用户的输入,你可以在button
点击的回调事件中发起这个请求(Request
)。
当你调用了enqueueWork()
之后,JobIntentService
将会执行定义在它onHandleWork()
方法中的任务,执行完成之后JobIntentService
会自己停止自己(stop itself
)。
下一步就是将任务执行的结果返回给源的Activity
或者Fragment
,下个文档将会介绍如何使用BroadCastReceiver
去实现这个目的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)