Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从intentservcie回调到jobservice

从intentservcie回调到jobservice
EN

Stack Overflow用户
提问于 2016-07-28 22:25:39
回答 2查看 2.8K关注 0票数 6

我有一个作业调度程序,可以触发作业服务的onStartjob。在onStartJob中,我启动了一个intentservice来完成这项工作。工作完成后,我想让intentservice回调jobservice,这样就可以调用onjobfinished了。如何回调JobService?

EN

回答 2

Stack Overflow用户

发布于 2016-07-29 04:11:12

您可以使用一些动作常量(例如ACTION_DOWNLOAD_FINISHED)在onStartJob()方法的Jobservice中创建BroadcastReceiver并注册它。此接收器将把所有工作委托给onJobFinished()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static final String ACTION_DOWLOAD_FINISHED = "actionDownloadFinished";

private BroadcastReceiver downloadFinishedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) { 
        context.unregisterReceiver(this); //Unregister receiver to avoid receiver leaks exception
        onJobFinished();
    }
};

public void onStartJob() {
    IntentFilter filter = new IntentFilter(ACTION_DOWNLOAD_FINISHED);        
    //Use LocalBroadcastManager to catch the intents only from your app
    LocalBroadcastManager.getInstance(this).registerReceiver(downloadFinishedReceiver , filter);

    //other job starting stuff...
}

然后,在意图服务结束它的工作后,您可以从它发送带有ACTION_DOWNLOAD_FINISHED操作的广播意图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// ...downloading stuff
Intent downloadFinishedIntent = new Intent(Jobservice.ACTION_DOWNLOAD_FINISHED);
//Use LocalBroadcastManager to broadcast intent only within your app
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

当意图服务的任务完成时,它发送由在Jobservice中注册的接收器捕获的广播意图。接收器然后调用onJobFinished()方法。

您可以在以下位置找到详细信息:https://developer.android.com/training/run-background-service/report-status.html

票数 3
EN

Stack Overflow用户

发布于 2016-09-04 17:35:58

我正在做同样的事情(启动IntentService的JobService),下面是我所做的:

简单地说,我使用了一个带有Handler.Callback的处理程序,我可以将它作为信使传递给我的IntentService,这样IntentService就可以向Handler.Callback发送一条消息来完成这项工作。Handler.Callback可以看到我的JobService,所以它可以调用finishJob(...)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyJobService extends JobService implements Handler.Callback {

  private Handler mHandler = new Handler(this);

  public static final String BNDL_MESSENGER = "messenger";
  public static final String BNDL_PARAMS    = "params";

  public static final int FINISH_JOB_MESSAGE     = 100;
  public static final int NEEDS_RESCHEDULE_TRUE  = 0;
  public static final int NEEDS_RESCHEDULE_FALSE = 1;

  public boolean handleMessage(Message msg) {
    int msgType = msg.what;

    if (msgType == FINISH_JOB_MESSAGE) {
      int           jobId           = msg.arg1;
      JobParameters params          = (JobParameters)msg.obj;
      boolean       needsReschedule = (msg.arg2 == NEEDS_RESCHEDULE_TRUE);

      Log.i(TAG, "Finishing Job ID: " + jobId);
      jobFinished(params, needsReschedule);
    } else {
      Log.e(TAG, "Message type not supported: " + msgType);
    }    
  }

  @Override
  public boolean onStartJob(JobParameters params) {

    Intent intent = new Intent(this, MyIntentService.class);
    intent.putExtra(BNDL_MESSENGER, new Messenger(mHandler));
    intent.putExtra(BNDL_PARAMS, params);

    startService(intent);                      
  }
}

然后你的IntentService会发回一条消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyIntentService extends IntentService {
  @Override
  public void onHandleIntent(Intent intent) {
    Messenger messenger = (Messenger)intent.getParcelableExtra(MyJobService.BNDL_MESSENGER);
    JobParameters params = (JobParameters)intent.getParcelableExtra(MyJobService.BNDL_PARAMS);

    if (messenger != null) {
      Message msg = Message.obtain();
      msg.what = MyJobService.FINISH_JOB_MESSAGE;
      msg.arg1 = params.getJobId();
      msg.arg2 = MyJobService.NEEDS_RESCHEDULE_TRUE;
      msg.obj  = params;

      try {
        messenger.send(msg);
      } catch (RemoteException re) {
        Log.e(TAG, "Couldn't send message to finish job!", re);
      }
    }
  }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38647733

复制
相关文章
怎么把电脑任务栏调到下面
品牌型号:联想天逸510S 2020 系统:win10 1909 64位企业版 部分用户可能电脑型号不一样,但系统版本一致都适合该方法。 怎么把电脑任务栏调到下面呢?给大家分享一下怎么将电脑的任务栏调
牛肉面
2021/03/03
2K0
【Android 电量优化】电量优化 ( JobScheduler | JobService | AsyncTask )
① 获取 JobScheduler 服务 : 从 Context 对象中 , 调用 getSystemService 方法跨进程获取 ;
韩曙亮
2023/03/28
1.3K0
【Android 电量优化】JobScheduler 源码分析 ( JobServiceContext 源码分析 | 闭环操作总结 | 用户提交任务 | 广播接收者接受相关广播触发任务执行 )★
上一篇博客 【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | 任务检查 | 任务执行 ) 中在 JobSchedulerService 中的 assignJobsToContextsLocked 方法中 , 有如下代码 :
韩曙亮
2023/03/28
6000
从全局变量寻找到Tomcat回显方式
前言 对于回显的获取主要是在ApplicationFilterChain类的lastServicedRequest / lastServicedResponse两个属性,是使用的ThreadLocal进行修饰的,并且,在执行请求的过程中,通过反射修改属性值,能够记录下当前线程的request对象的值。 之后在反序列化利用过程中方便利用ThreadLocal取出对应的request进行内存马的注入关键步骤。 这里转而通过寻找全局存储的request / response进行内存马的注入操作。 正文 如何获取的
FB客服
2023/03/29
3580
从全局变量寻找到Tomcat回显方式
异步JavaScript:从回调地狱到异步和等待
这是一个典型的异步编程挑战,您如何选择处理异步调用,在很大程度上,会导致或破坏您的应用程序,并且可能是您的整个启动。
WindCoder
2018/09/19
3.7K0
异步JavaScript:从回调地狱到异步和等待
从计算、建模到回测:因子挖掘的最佳实践
量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,荣获2021年度AMMA优秀品牌力、优秀洞察力大奖,连续2年被腾讯云+社区评选为“年度最佳作者”。 前言 因子挖掘是量化交易的基础。除传统的基本面因子外,从中高频行情数据中挖掘有价值的因子,并进一步建模和回测以构建交易系统,是一个量化团队的必经之路。金融或者量化金融是一个高度市场化、多方机构高度博弈的领域。因子的有效时
量化投资与机器学习微信公众号
2022/05/17
6.6K0
从计算、建模到回测:因子挖掘的最佳实践
安卓开发1年背了几十份面经还是连挂了6个面试,拿到最终offer后我总结了这些坑点
其实大家换工作无非钱少了/环境不好/没成长三种原因,但是面试在讲离职原因的时候一定不要过于实诚,请尽量往个人发展这个方向上靠拢,切忌一定不要说现任公司的坏话,尤其是跳槽频繁或者像我这种第一份工作不满两年的,一定要想好自己的离职理由,我有几家公司明显技术答的还行,但是因为离职理由挂掉的。
Android技术干货分享
2021/04/21
1.4K0
安卓开发1年背了几十份面经还是连挂了6个面试,拿到最终offer后我总结了这些坑点
【javascript】异步编年史,从“纯回调”到Promise
啦啦啦321
2018/01/03
1.1K0
【javascript】异步编年史,从“纯回调”到Promise
回调函数Callback —从同步思维切换到异步思维
这是一种非常常见的直线性思维,我先请求网站拿到 html,然后我再把 html 传给负责处理的函数。在整个过程中,“我“担任着调度的角色。
王图思睿
2021/06/16
7930
[Android] 后台任务系列之JobScheduler
上次分析Android O广播的问题遗留了一个东西没提,那就是官方推荐使用的JobScheduler。这篇就简单了解一下这是个什么东西。
wOw
2020/01/20
6.3K0
从应届技术男到百度VP,这是低调到没百科的吴海锋首次受访
在《百度AI人才图鉴》中,我们说他是百度搜索业务的现任掌舵者、鲜有曝光的12年的老百度,正在承担着百度安身立命的“搜索”的继往开来使命。
量子位
2018/07/24
7720
从应届技术男到百度VP,这是低调到没百科的吴海锋首次受访
刚刚我从服务器回滚了 dotnet 5 的环境
今天是 2020.11.13 我在 CI 服务器上更新 dotnet 到 dotnet 5 以及 VS 到 16.8.1 最新版本,但是我在刚刚不得不回滚了环境…… 因为构建不通过
林德熙
2020/11/19
6260
跨界教授林宙辰:从北大来,回北大去
内容概要:IJCAI-SAIA YES 于 7 月 5-7 日在上海召开,在这场汇集 AI 领域青年学者、学术大咖的盛会上,我们有幸采访到了来自北京大学信息科学技术学院的林宙辰教授。
HyperAI超神经
2021/08/25
8700
回《驳 <Python正则表达式,请不要再用re.compile了!!!>》
知乎用户@Manjusaka在阅读了我的文章《Python正则表达式,请不要再用re.compile了!!!》以后,写了一篇驳文《驳 Python正则表达式,请不要再用re.compile了!!!》
青南
2019/08/20
1.4K0
回《驳 <Python正则表达式,请不要再用re.compile了!!!>》
从2050回顾2020,职业规划与技术路径(节选)
2020是一个神奇的年份,西班牙流感之百年纪念典藏版顺利激活回归。想知道2020到2050会发生什么,回顾1900-1950大致可以了解。如何避开不安和恐慌,寻求内心的平和和生活的安宁呢?节选如下3个问题:
zhangrelay
2020/08/02
5910
回调
回调简单而言:在一个类(A)的方法(a)中调用另一个类(B)的方法(b),当方法(b)执行完之后就调用类(A)中的方法(c),这就是回调的过程,是不是很简单?简单分析可以知道一个类(A)持有另一个类(B)的引用,方法(c)就叫做回调函数,画成UML图就如下所示:
晚上没宵夜
2020/03/10
2.6K0
android缩放动画中心缩放_安卓动画缩放调到多少比较好
备注:由于我的图片是导出视频再用PS转换成的gif,故效率上有所损失,实际动画效果和速度比图片的快。
全栈程序员站长
2022/11/04
2.4K0
android缩放动画中心缩放_安卓动画缩放调到多少比较好
基于gitlab ci构建devops平台
devops的概念很多,理解也很多。我的理解,它属于软件工程范畴。它定义了一种理念,基于这种理念,能够快速的开发,交付软件及成果物。各个团队直接在这个体系中,高效的沟通,协作等。
暮雨
2018/10/11
4.6K2
基于gitlab ci构建devops平台
​29 - 回调函数和回调地狱
原文地址:https://dev.to/bhagatparwinder/callback-functions-callback-hell-79n
前端黑板报
2022/12/01
4.6K0
什么是回调地狱?如何解决回调地狱问题_地狱回调
这个问题呢,需要从Node.js的API说起,这里就会有人问了?博主你不是说回调地狱的问题吗,怎么说到API了,别急,看博主一步一步的解释给你听:
全栈程序员站长
2022/11/15
3.2K0

相似问题

从Java回调到BPEL?

21

从ViewModel回调到视图

22

从C#回调到VBScript

30

如何从服务回调到活动

10

回调到sectionHeadersPinToVisibleBounds

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文