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

  • 相关阅读:
    发送邮件
    php防止表单重复提交
    mysql 优化之注意
    mysqldump
    项目中下拉框链接问题
    css在IE和Firefox下的兼容性
    利用curl并发来提高页面访问速度
    修改linux下mysql目录权限
    ajax跨域
    wireshark抓包
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302500.html
Copyright © 2020-2023  润新知