`
a38876399
  • 浏览: 147839 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

IntentService实现原理及内部代码

阅读更多

    很多网友可能发现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也是会阻塞的。

 

 

摘自:http://www.189works.com/article-16485-1.html

分享到:
评论

相关推荐

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

    在Android开发中,IntentService是一个特殊的Service子类,它的设计主要目的是为了简化异步任务的执行,特别是那些一次性...通过理解IntentService的实现原理,开发者可以更好地利用它来优化应用程序的性能和用户体验。

    android 中的服务Service intentService例子

    - **源码**:理解Service和IntentService的工作原理,需要阅读和分析Android系统的源代码,以便深入学习其内部机制。 - **工具**:开发过程中,可以利用Android Studio等IDE工具,以及调试工具进行服务的开发和测试...

    IntentService使用Demo

    IntentService的核心在于其内部实现了一个工作队列和一个工作线程。工作线程通过`onStartCommand()`方法接收Intent,然后通过`onHandleIntent(Intent intent)`方法执行具体的任务。`onHandleIntent()`方法在后台...

    《Android系统原理及开发要点详解》PDF版本下载.txt

    根据提供的文件信息,本文将对《Android系统原理及开发要点详解》这一书籍的主要知识点进行详细的阐述与解析。尽管具体的书籍内容无法直接获取,但我们可以基于标题、描述以及可能涵盖的主题来推断并展开讨论。 ###...

    Android ndroid 查询工具源代码.zip

    本篇将针对"Android ndroid 查询工具源代码.zip"进行深入剖析,探讨其核心功能与实现原理。 源代码是软件开发的基础,对于Android查询工具而言,源代码揭示了其内部的工作机制。此压缩包中的"Android ndroid 查询...

    Android知识点及重要代码合集 word文档

    4.5 Gallery核心代码及SimpleAdapter的使用 35 4.6 EditText设置监听 37 5.1 Activity生命周期 38 5.2 Activity中临时数据存储相关方法 40 5.3 Intent 意图的使用 43 5.4 使用显式意图激活组件的多种方式 44 5.5 ...

    Android应用程序开发源代码

    在Android应用程序开发中,源代码是开发者的心血结晶,它揭示了应用的工作原理和实现细节。密西西比河谷州立大学提供的这个"Android应用程序开发源代码"资源,无疑为学习者提供了一个宝贵的实践平台,能够加深对...

    intentservicedemo

    IntentService继承自Service类,它的核心是内部的WorkerThread和Handler。当启动IntentService时,系统会创建一个工作线程,并在该线程中运行onHandleIntent()方法。这样确保了所有的任务都在同一工作线程中顺序...

    8个android应用程序源代码

    在Android开发领域,源代码是理解应用程序工作原理和学习新技能的关键资源。"8个Android应用程序源代码"的压缩包提供了宝贵的实践经验,让开发者能够深入探究各种应用的设计和实现细节。下面,我们将详细讨论这些源...

    Android应用程序完整源代码(7个)

    在Android开发领域,掌握完整的应用程序源代码是提升技能和理解应用程序工作原理的关键。这个压缩包包含7个Android应用程序的源代码,提供了丰富的学习资源。这些源代码覆盖了Android开发的多个方面,对于初学者和...

    7个Android应用程序源代码.rar

    在Android开发领域,源代码是理解应用程序工作原理和学习新技能的关键。这个"7个Android应用程序源代码.rar"压缩包包含七个不同的Android应用项目,它们为开发者提供了宝贵的实践经验和学习资源。通过分析这些源代码...

    IntentServiceDemo

    下面将详细阐述IntentService的主要特点、工作原理以及如何使用。 一、IntentService的特点 1. 单线程执行:IntentService内部维护了一个工作队列,确保同一时间只有一个任务在执行,避免了多线程并发问题。 2. ...

    《Android核心原理》

    《Android核心原理》是一本深度剖析Android系统内部工作机制的专业书籍,对于从事Android开发的人员来说,深入理解这些核心原理是提升技术能力、优化应用性能的关键。Android系统作为一个开放源码的移动操作系统,其...

    android通讯录源代码

    这份"android通讯录源代码"提供了一个深入理解Android通讯录工作原理的机会,适合Android开发者进行学习和研究。 1. **Android系统架构**: Android是一个基于Linux内核的操作系统,它采用了分层架构,包括Linux...

    Android代码-DownloadPorgressBar

    下面,我们将深入探讨这个主题,并结合可能的源代码文件来理解其工作原理。 首先,下载进度条通常是通过使用ProgressBar或ProgressDrawable控件来实现的。在Android中,ProgressBar是一种可以显示进度的视图,它...

    android应用开发揭秘源代码

    在Android应用开发的世界里,源代码是学习和理解平台工作原理的关键。"Android应用开发揭秘源代码"无疑为开发者提供了一扇深入探索Android系统内部机制的窗口。这是一份宝贵的资源,涵盖了Android应用开发的各个方面...

    Android LumaQQ源代码.rar

    源码的完整性意味着开发者可以全面了解项目的结构、功能实现和内部工作原理。 在Android开发中,源码分析是一种重要的学习手段,因为它允许开发者直接查看并理解代码的每一行,从而深入学习各种技术细节。对于...

    7个Android应用程序源代码

    在Android开发领域,源代码是理解应用程序工作原理和学习新技能的关键资源。这个压缩包包含的7个Android应用程序源代码提供了宝贵的实践经验,可以帮助开发者深化对Android应用开发的理解。以下是每个关键知识点的...

    荟生活源代码

    开发者可以通过反编译APK来查看或修改应用的内部结构,了解其工作原理。 对于"荟生活"的源代码,我们可以从以下几个方面探讨相关的知识点: 1. **编程语言**:源代码通常使用一种或多种编程语言编写,可能是Java、...

Global site tag (gtag.js) - Google Analytics