[knowledgePoint]_[Service]

最常用的三个方法

  • 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])