返回顶部
首页 > 资讯 > 移动开发 >android IntentService实现原理及内部代码分享
  • 534
分享到

android IntentService实现原理及内部代码分享

intentserviceAndroid 2022-06-06 10:06:52 534人浏览 安东尼
摘要

    很多网友可能发现Android中除了Service还有一个IntentService,他们之间到底有哪些区别呢? 在继承关系上而言Inte

    很多网友可能发现Android中除了Service还有一个IntentService,他们之间到底有哪些区别呢? 在继承关系上而言IntentService是Service的子类,内部实现的代码中涉及到一些Android入门开发者不了解的Looper,Android123在早期的文章中已经说明他们的用法,这里不再赘述,有关原理大家可以看源码实现如下:
    代码如下:
public abstract class IntentService extends Service {
    private volatile Looper mServiceLooper;
    private volatile ServiceHandler mServiceHandler; //一个Handler封装了Looper对象
    private String mName;
    private boolean mRedelivery;
    private final class ServiceHandler extends Handler {
        public ServiceHandler(Looper looper) {
            super(looper);
        }
        @Override
        public void handleMessage(Message msg) {
            onHandleIntent((Intent)msg.obj);
            stopSelf(msg.arg1);
        }
    }
    public IntentService(String name) { //构造方法,需要提供一个name作为标识
        super();
        mName = name;
    }

  对于下面的setIntentRedelivery的参数,如果为真时
代码如下:
onStartCommand(Intent, int, int)} will return
Service#START_REDELIVER_INTENT}, so if this process dies before
onHandleIntent(Intent)} returns, the process will be restarted

如果为假时
代码如下:
onStartCommand(Intent, int, int)} will return
Service#START_NOT_STICKY}, and if the process dies
     public void setIntentRedelivery(boolean enabled) {
        mRedelivery = enabled;
    }
    @Override
    public void onCreate() { //这里重写父类Service的创建,主要是构造一个线程
        super.onCreate();
        HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
        thread.start();
        mServiceLooper = thread.getLooper();
        mServiceHandler = new ServiceHandler(mServiceLooper);
    }
    @Override
    public void onStart(Intent intent, int startId) {  //Android 2.0以前的Service启动参数控制
        Message msg = mServiceHandler.obtainMessage();
        msg.arg1 = startId;
        msg.obj = intent;
        mServiceHandler.sendMessage(msg);
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) { //Android 2.0以后的服务启动参数
        onStart(intent, startId);
        return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
    }
    @Override
    public void onDestroy() { //服务摧毁的时候Looper一定要释放掉,这点很重要。
        mServiceLooper.quit();
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    protected abstract void onHandleIntent(Intent intent);
}

 从上面的代码相信大家可以看出IntentService和Service的不同了,通过Looper和Thread来解决标准Service中处理逻辑的阻塞问题,毕竟Android的Service也是会阻塞的。 您可能感兴趣的文章:Android编程实现自定义分享列表ACTioN_SEND功能的方法Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码


--结束END--

本文标题: android IntentService实现原理及内部代码分享

本文链接: https://lsjlt.com/news/27665.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • android IntentService实现原理及内部代码分享
        很多网友可能发现Android中除了Service还有一个IntentService,他们之间到底有哪些区别呢 在继承关系上而言Inten...
    99+
    2022-06-06
    intentservice Android
  • Android Handler 原理分析及实例代码
    Android Handler 原理分析 Handler一个让无数android开发者头疼的东西,希望我今天这边文章能为您彻底根治这个问题 今天就为大家详细剖析下Handler...
    99+
    2022-06-06
    handler Android
  • Java设计模式之代理模式原理及实现代码分享
    简介Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术。生活中的方方面面都可以虚拟到代码中。代理模式所讲的就是现实生活中的这么一个概念:中介。代理模式的定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。...
    99+
    2023-05-30
    java 设计模式 代理模式
  • android长截屏原理及实现代码
    小米系统自带的长截屏应该很多人都用过,效果不错。当长截屏时listview就会自动滚动,当按下停止截屏时,就会得到一张完整的截屏。该篇就介绍一下长截屏的原理上篇中介绍了android屏幕共享实现方式,该篇的原理和上一篇基本一致。获取view...
    99+
    2023-05-30
    android 长截屏 roi
  • Android基站定位原理及实现代码
    代码如下: import java.io.BufferedReader; import java.io.InputStreamReader; import org.apach...
    99+
    2022-06-06
    定位 Android
  • android底部菜单栏实现原理与代码
    上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天把demo贴出来一是...
    99+
    2022-06-06
    菜单 菜单栏 Android
  • Android 分享功能的实现代码
    Android 分享功能的实现代码 一个Activity中,取出设备上安装的所有支持分享动作的Activity,在grid中显示。 实例代码: public class N...
    99+
    2022-06-06
    Android
  • Python伪代码分析点赞器实现原理及代码
    目录前言一、简介1.适用场景2.核心逻辑二、代码实现1.模拟登录2.点赞接口分析3.点赞器伪代码实现三、总结前言 许多社区类平台都具备点赞功能,应运而生的就是自动点赞器,今天用Pyt...
    99+
    2024-04-02
  • Android中分析Jetpack Compose动画内部的实现原理
    目录前言正文总结前言 Compose的动画Api用起来很简单,效果看起来很神奇,那么它内部到底是如何运转的呢 使用动画的代码示例: var isOffset by remember ...
    99+
    2024-04-02
  • 蓝牙原理Android代码实现
    本文实例为大家分享了Android实现蓝牙原理代码,供大家参考,具体内容如下 package com.example.se7en.testbluetooth; import ...
    99+
    2022-06-06
    Android 蓝牙
  • Android仿UC底部菜单栏实现原理与代码
    相关的链接: Android 底部菜单栏实现 最近刚看完ViewPager,就想到做这样一个Demo,当然也参考了高手们的实例里边的网格菜单,开始我打算用自定义的imgBtn,...
    99+
    2022-06-06
    菜单 uc 菜单栏 Android
  • 详解Android中Handler的内部实现原理
    本文主要是对Handler和消息循环的实现原理进行源码分析,如果不熟悉Handler可以参见博文《详解Android中Handler的使用方法》,里面对Android为何以引入...
    99+
    2022-06-06
    handler Android
  • Magisk内部实现原理
    Android10以后,Android系统限制了System分区的修改,结果就是,即使你i是自己编译的Android系统,即使是有做高的root权限,你依然无法挂载System分区并对其内容进行修改...
    99+
    2023-08-31
    android linux ubuntu
  • Android登录界面的实现代码分享
    最近由于项目需要,宝宝好久没搞Android啦,又是因为项目需要,现在继续弄Android,哎,说多了都是泪呀,别的不用多说,先搞一个登录界面练练手,登录界面可以说是Andro...
    99+
    2022-06-06
    界面 Android
  • Android实现消水果游戏代码分享
    消水果游戏大家都玩过吧,今天小编给大家分享实现消水果游戏的代码,废话不多说了,具体代码如下所示: #include "InGameScene.h" #include "Pa...
    99+
    2022-06-06
    水果 Android
  • Android内部存储与外部存储实例代码分析
    今天小编给大家分享一下Android内部存储与外部存储实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是内部存...
    99+
    2023-07-05
  • mysqldump内部实现原理的示例分析
    小编给大家分享一下mysqldump内部实现原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们可以通过打开gene...
    99+
    2024-04-02
  • 哈希表的原理及实现代码
    哈希表可以表述为,是一种可以根据关键字快速查询数据的数据结构 一. 哈希表有哪些优点? 不论哈希表中数据有多少,增加,删除,改写数据的复杂度平均都是O(1),效率非常高 二. 实现哈希表 1. 哈希表原理 如果说每一个数据它都对应着一个固...
    99+
    2023-01-31
    原理 代码 哈希表
  • Java NIO原理图文分析及如何用代码实现
    本篇文章为大家展示了Java NIO原理图文分析及如何用代码实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言:最近在分析hadoop的RPC(Remote Procedure Call Pro...
    99+
    2023-06-17
  • 安卓(Android)聊天机器人实现代码分享
    今天看到一个ios写的图灵机器人,直接去官网(http://www.tuling123.com/openapi/)看了下API接入,太简单了,就一个get请求~于是乎,写了一个...
    99+
    2022-06-06
    聊天机器人 机器人 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作