专栏首页nginx遇上redisandroid service原理及免杀(2)

android service原理及免杀(2)

二. 实现Service

实现服务有两种方式,继承service或者IntentService。后者是前者的子类。前者包含上一章节中Service的几个重要的方法,用于普通的服务。后者可以自己开一个工作线程,串行的处理多个请求。

2.1继承Service

继承Service就可以实现对请求多线程的处理,前面介绍了Service的生命周期,可以按照生命周期实现方法,就不放示例了。

2.2继承IntentService

大多数服务不需要同时处理多个请求,继承IntentService是最好的选择。

IntentService处理流程:

1.创建按默认的一个worker线程处理传递给onStartCommand()所有的intent,在非UI线程中工作。

2.创建一个工作队列依次传递一个intent到你实现的onHandleIntent()方法,避免了多线程。

3.在所有启动请求被处理后自动关闭服务,不需要调用stopSelf()

4.默认提供onBind()的实现,并返回null

5.默认提供onStartCommand()的实现,实现发送intent到工作队列再到你的onHandleIntent()方法实现。

这些都加入到IntentService中了,你需要做的就是实现构造方法和onHandleIntent(),如下:

public class HelloIntentService extends IntentService {
 
  /**
   * A constructor is required, and must call the super IntentService(String)
   * constructor with a name for the worker thread.
   */
  public HelloIntentService() {
      super("HelloIntentService");
  }
 
  /**
   * The IntentService calls this method from the default worker thread with
   * the intent that started the service. When this method returns, IntentService
   * stops the service, as appropriate.
   */
  @Override
  protected void onHandleIntent(Intent intent) {
      // Normally we would do some work here, like download a file.
      // For our sample, we just sleep for 5 seconds.
      long endTime = System.currentTimeMillis() + 5*1000;
      while (System.currentTimeMillis() < endTime) {
          synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
          }
      }
  }}

本文分享自微信公众号 - nginx遇上redis(GGame_over_the_world)

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

原始发表时间:2019-11-25

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • xmake从入门到精通5:Android平台编译详解

    xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。

    ruki
  • Android JNI Crash定位步骤

    今天讲的是纯干货,目的就是为了指导Android开发者如何根据JNI Crash日志顺藤摸瓜,最后直捣黄龙定位磨人的JNI Crash。所以废话不多,直接开干吧...

    glumes
  • 「玲珑宝塔」优化 Apk 包大小

    如今的 5 G 也在万众瞩目瞩目下翩翩起舞,而 Android 近些年也惹得不少争议,所谓的谣言,不过尔尔。

    HLQ_Struggle
  • 苹果iOS13.2.2正式版修复闷杀后台问题了?别担心,"PerfDog"帮你来检测!

    ? 导语   苹果于上周推送了iOS 13.2版本,带来了用户备受期待的图像处理系统深度融合(Deep Fusion),新增70多个表情、HomeKit安全...

    WeTest质量开放平台团队
  • vivo web service:亿万级规模web服务引擎架构

    vivo web service是开发团队围绕奇点内核打造出的基于vivo手机平台的web服务引擎,该服务引擎从浏览器产品线中经过多年迭代而出。除了提供可靠的基...

    2020labs小助手
  • scala-sparkML学习笔记:Scala并发编程实战:Executor线程池

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    MachineLP
  • 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven

    本文是微信公众号【Java技术江湖】的《走进JavaWeb技术世界》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博...

    Java技术江湖
  • 使用Groovy和Gradle轻松进行数据库操作

    并非所有人都认为Java 编程语言很性感。但是,从最保守的企业到最古怪的初创企业,Java 虚拟机都是无处不在的主导力量。如今,有许多可替代的语言可编译为Jav...

    八音弦
  • 追踪影响数百万用户的Android广告软件开发人员

    ESET研究人员在Google Play上发现了活跃一年的广告软件运营商。所涉及的应用程序已安装了800万次,背后的运营商使用了一些技巧来隐藏。

    FB客服
  • 怎么样爬取朋友圈的内容?

    AirtestIDE 是网易出的跨平台的 UI 自动化编辑器,可以用来做自动化测试和爬虫。

    伪君子

扫码关注云+社区

领取腾讯云代金券