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就是为了处理耗时操作的。

  • 相关阅读:
    【转】解决在Android设备播放音频与其他应用重音的问题,并监听耳机的控制按钮
    【转】wamp 3.0.6(apache 2.4.23) 403 forbidden 解决办法
    身份证第18位(校验码)的计算方法
    【转】Win10开机密码忘了?教你破解Win10开机密码
    【转】具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能
    钉钉自定义机器人 发送文本 换行 无效果
    屏蔽右键+f12
    【转】理解WebKit和Chromium: JavaScript引擎简介
    第2章 排序 | 第10节 计数排序练习题 && 基数排序
    图像处理-深入探索插值操作
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302500.html
Copyright © 2011-2022 走看看