美文网首页
[knowledgePoint]_[Service]

[knowledgePoint]_[Service]

作者: 勤学奋进小郎君 | 来源:发表于2018-08-23 01:14 被阅读0次

    最常用的三个方法

    • Summary
    1、服务不会创建新进程独立运行
    2、服务中的代码都在主线程中(创建服务的进程)
    3、服务的后台操作是通过在其内部开启子线程来完成
    
    • onCreate 创建服务时调用
    • onStartCommand 启动服务时,调用
    使用intent开启服务。服务创建后后,再次执行startService()函数,只会重新启动服务,即只执行onStartCommand()
    
    • onDestroy 销毁服务时,调用

    注意

    • 服务由活动创建,之后就不受活动控制了;如果活动想继续控制服务,使用onBind方法
    • onBind:让活动来控制服务(主要依靠ibinder接口)
    活动控制服务的过程--bindService:
    1. 选定需要绑定的对象
    2. 打开连接到对象的通道
    3. 通道连接成后,onBinder方法返回一个实现了iBinder接口的对象,这个对象包含控制服务对象的所有方法
    4. 活动调用这些方法,来控制服务
    
    • 定义内部类(类中类,eg:class father{class son...):private father.son

    • 销毁服务

    - startService,执行了onCreate,onStartCommand方法:创建并开始了服务;使用stopService就可以停止并销毁它
    - bindService,执行了onCreate和连接服务后使用iBind操作服务。使用unBindService,断开连接并销毁它,但是没有停止服务的操作
    - 所以,当同时执行了startService,bindService,就需要使用stopServic停止服务,unBindService断开连接
    
    

    问题:

    Q: 活动不控制服务时(未使用onBind函数),只调用onStartCommand函数。当活动控制服务(使用onBind函数)时,先执行哪个函数?

    • [Answer] 绑定可以包含创建服务。当bindService的标志位为BIND_AUTO_CREATE,官方解释:当绑定存在时,自动创建服务(只调用onCreate,而不调用onStartCommand)

    Q:只定义了一个myservice.downloadBinder类,却直接将参数赋值给类,并调用其函数?

    • [Answer] downloadBinder是myservice的成员内部类,和普通成员一样;

    Q:ServiceConnection参数中,连接的对象,是bindService赋值的吗?

    • [Answer] 需要被控制的服务对象,是由bindService执行中赋值的

    相关文章

      网友评论

          本文标题:[knowledgePoint]_[Service]

          本文链接:https://www.haomeiwen.com/subject/xiguiftx.html