zoukankan      html  css  js  c++  java
  • Android四大组件之:Service

        Service是和Activity最相似的一个组件,只不过Activity运行在前台,有用户界面,和用户之间有交互,而Service运行在后台,无法和用户之间进行交互;Service也有自己的生命周期,并且和Activity一样都需要在android的清单文件中配置。

        可以通过两种方式来启动Service,分别如下:

    1:startService()

       (1): 通过该方式启动的Service和启动者之间没有关系,被启动的Service就像“脱缰的野马”,即使启动者退出了,被启动的Service还会继续运行。

      (2):启动者启动Service时startService(intent),可以通过Intent给Service传递数据,但是除此之外,启动者和Service之间无法再进行通信。

      (3):通过该方式启动的Service可以自杀stopSelf(),也可以被启动者杀死stopService(intent)。

    2:bindService()

     (1):通过该方式启动的Service和启动者绑定到一起了,如果启动者退出,则被启动的Service也会终止。

     (2):启动者不仅在启动Service时bindService(intent,ServiceConnection,flags),可以通过Intent给Service传递数据,而且还可以通过ServiceConnection对象的onServiceConnected方法的参数进行通信。就相当于在启动者中,可以拿到Service的引用或Service中某对象的引用,这样以来就可以在启动者中去访问Service中的方法。

     (3):启动者退出,被启动的Service终止;Service可以自杀stopSelf(),也可以被启动者解除绑定unbindService(connection)后而终止。

        Service和Activity一样都不能直接处理耗时操作,否则会引发ANR异常;只能通过启动子线程的方式,来让子线程去完成耗时操作。

        如果我们启动一个Service,并让这个Service启动子线程,目的仅仅是为了完成一个耗时操作,那么没必要继承普通Service,并手动创建一个子线程 ;直接继承IntentService,重写OnHandleIntent()方法即可。

       IntentService在接收到Intent请求时,会将其加入队列中,并自动创建一个子线程来依次处理Intent请求,执行onHandleIntent方法中的操作,开发者无须再处理多线程问题;当所有Intent请求处理完毕后,IntentService会自动终止。

      我个人觉得IntentService就是为了处理耗时操作的。

  • 相关阅读:
    Postman使用教程
    CAD和ArcGIS转换 矢量配准
    SAP CRM Advanced search和Simple search里Max hit表现行为的差异
    SAP CRM Product simple search的启用步骤
    如何快速定位SAP CRM订单应用(Order Application)错误消息抛出的准确位置
    如何动态修改SAP CRM WebClient UI表格栏的宽度
    如何在SAP CRM WebClient UI里创建web service并使用ABAP消费
    如何处理SAP CRM Web Service错误
    如何使用SAP CRM WebClient UI实现一个类似新浪微博的字数统计器
    如何开启SAP CRM基于WORD模板创建附件的功能
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302500.html
Copyright © 2011-2022 走看看