【Android基础】-Service组件使用详解

Service是Android四大组件之一,它与Activity的区别是:它一直在后台运行,没有前台界面。一旦Service被启动起来后,他就跟Activity一样,完全具有自己的生命周期。

一、创建Service,定义一个继承Service的子类

Service中定义了一系列生命周期方法,如下:

  • IBinder onBind(Intent intent):该方法是Service必须实现的方法。该方法返回一个IBinder对象,应用程序可以通过该对象与Service组件通信。
  • void onCreate():当Service第一次被创建时调用该方法。
  • void onDestory():当Service被关闭之前调用该方法。
  • void onStartCommand():该方法的早起版本是onStart()方法,每次调用startService(Intent intent)方法Service都会调用onStartCommand()。
  • boolean onUnbind(Intent intent):当该Service上绑定的所有客户端都断开连接时Service会执行该方法。
  • void onRebind(Intent intent):当onUnbind放回true,客户端调用unbindServie后,在调用bindService时会执行onRebind方法。

二、在AndroidManifest.xml文件中配置Service;

        <service
            android:name="org.iti.tailyou.servicedemo.MService"
            android:exported="false" >
            <intent-filter>
                <action android:name="org.iti.tailyou.MService" >
                </action>
            </intent-filter>
        </service>

配置的时候可以设置<intent-filter>,在过滤器中定义启动Service的action。

  1. 如果配置Service的时候设置了<intent-filter>,默认情况下其他应用程序的组件可以启动该Service,可以通过设置 android:exported="false"来禁止其他应用程序组件启动Service。
  2. 如果配置Service的时候没有设置<intent-filter>,默认情况下其他应用程序的组件不可以启动该Service。

三、Service的启动方式

  • 通过Context的startService()方法:通过该方法启动Service,访问者与Service没有关联,即使启动Service的组件退出了,Service依然运行。
  • 通过Context的bindService()方法:通过该方法启动Service,访问者与Service绑定在一起,一旦访问者退出,Service也就终止。

四、Service的生命周期

根据启动Service的方式不同,Service的生命周期也有差异:

  1. startService启动,执行onCreate、onStartCommand方法,Service自己停止或调用者停止,执行onDestory方法。每调用一次startService方法就会执行一次onStartCommand方法。
  2. bindService启动,执行onCreate、onBind方法,调用unbindService或者调用者退出,执行onUnbind、onDestory方法,不管客户端调用多少次bindService方法,都只执行一次onBind方法。
  3. 绑定到一个已经启动的Service,这时候调用unbindService方法,只执行onUnbind方法,再次调用bindService方法,会执行onRebind方法。

五、Service与Thread的区别

  • Thread:程序执行的最小单元,是cpu调度的最小单位,可以用Thread来执行一些异步操作。
  • Service:Service是Android中的一种机制,是Android中在后台运行的组件,和Activity一样,它是在程序的主线中运行。不能在Service中做耗时操作,如果要在Service中执行耗时任务,建议在Service中启动新的线程来执行。
  • 为什么需要Service而不直接用Thread?1、没法在不同的Activity中对同一线程进行控制;2、在Activity中启动线程,Activity退出后,线程依然在运行,但是Activity已经没有线程的引用的了,不能再控制该线程。

六、IntentService

1)为什么要引入IntentService?

  1. 启动Service不会启动新的进程,它与所在的应用程序位于同一进程;
  2. Service也不是一条新的线程,它运行在程序的主线程当中,因此不能在Service中直接处理耗时操作。

2)IntentService实现机制

IntentService使用队列来管理客户端发来的Intent请求,每当客户端通过Intent请求来启动IntentService时,IntentService会将该Intent加入队列,然后开启一条新的worker线程来依次处理队列中的Intent。

3)IntentService的特征

  1. IntentService会创建单独的worker线程来处理所有的Intent请求;
  2. 所有Intent请求处理完后,IntentService会自动停止;
  3. 继承IntentService只需重写onHandleIntent()方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-20 03:24:52

【Android基础】-Service组件使用详解的相关文章

Android官方架构组件:Lifecycle详解&amp;迪士尼彩乐园平台搭建原理分析

在过去的谷歌IO大会上,Google官方向我们推出了 Android Architecture Components,其中谈到Android组件处理生命周期的问题,向我们介绍了 Handling Lifecycles. 同时,如何利用 android.arch.lifecycle 包提供的类来控制数据.监听器等的 lifecycle.同时,LiveData 与 ViewModel 的 lifecycle 也依赖于 Lifecycle 框架. 经过公司内部的技术交流小组的探讨后,不少小伙伴觉得这个

Android开发四大组件--Activity详解

Android开发四大组件--Activity详解 - Android开发教程 Android开发的四大组件在开发中应用中是必不可少的,下面就来详解下四大组件之一Activity,总结自网络.Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启动时: 第一个Activity onPause()——>第二个Activity onCreate()——>

Android官方架构组件:Lifecycle详解&amp;迪士尼彩乐园网站架设原理分析

我们先将重要的这些类挑选出来: LifecycleObserver接口( Lifecycle观察者):实现该接口的类,通过注解的方式,可以通过被LifecycleOwner类的addObserver(LifecycleObserver o)方法注册,被注册后,LifecycleObserver便可以观察到LifecycleOwner的生命周期事件. LifecycleOwner接口(Lifecycle持有者):实现该接口的类持有生命周期(Lifecycle对象),该接口的生命周期(Lifecyc

Android官方架构组件:Lifecycle详解&amp;迪士尼彩乐园定制开发原理分析

Lifecycle 是一个类,它持有关于组件(如 Activity 或 Fragment)生命周期状态的信息,并且允许其他对象观察此状态. 我们只需要2步: 1.Prestener继承LifecycleObserver接口public interface IPresenter extends LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) void onCreate(@NotNull LifecycleOwner

[安卓基础] 009.组件Activity详解

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

Android四大组件--Activity详解

Android四大组件--Activity详解 分类: android android应用android开发 本文的主要内容包括1.activity的建立.配置和使用:2.activity的跳转和传值:3.startActivityForResult:4.activity的生命周期. 1.activity的建立.配置和使用 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个可视的窗口,一般情况

Android 中的 Service 全面总结详解【下】

上一篇文章Android 中的 Service 全面总结详解[下] 介绍了Service的一些知识以及本地Service的使用,如果对Service还不太了解的建议先看下上篇文章:本文主要接着上一篇讲下远程服务的使用: 在说到远程服务的时候,我们需要先了解一些预备的知识: 首先来了解一下AIDL机制: AIDL的作用 由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象.在Android平台,一个进程通常不能访问另一个进程的内存空间,

Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送,写这个系列真的很要命,你要去把他们的API文档大致的翻阅一遍,而且各种功能都实现一遍,解决各种bug各种坑,不得不说,极光推送真坑,大家使用还是要慎重,我们看一下极光推送的官网 https://www.jpush.cn/common/ 推送比较使用,很多软件有需要,所以在这个点拿出来多讲讲,我们本节

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A