Android Service 总结

概念

有些用时比较长的操作,希望他运行在后台,不耽误当前的操作,比如,网络请求,文件IO操作,大数据的数据库任务,播放音乐。
service在后台运行,不与用户交互

Question

  • 1,启动服务后,按Home键,服务是否还在运行 YES
  • 2, 启动服务后,退出进程,是否还在运行 NO
  • 3, 启动服务, 不用多线程,界面是否会阻塞(ANR) YES
  • 4, 服务是个新进程么,服务是个新线程么 ; 服务不是一个新的进程也不是一个新的线程,是当前进程绑定

按启动方式分类

Started Service

  • 1,startedService()启动
  • 2, 一旦启动,就运行在后台,即便启动它的对象(Activity)都被销毁了,它依然运行在后台
  • 3,通常之启动不返回值
  • 4,通常网络上传或这下载,操作完成后,自动停止
    onStartCommand()

Bound Service

  • 1,bindService()来绑定
  • 2,提供客户端服务器接口来启动
  • 3,发送请求返回值,甚至通过IPC来通信
  • 4,一个服务可以被多个调用者绑定,只要有一个绑定者,服务运行,所有绑定者都退出,服务退出,
    onBind

按服务性质分类

Local Service

Remote Service

按实现方法分类

Java Service

Native Service

Service 生命周期

BY startService()

onCreate();
onStartCommand();
onDestroy();

BY Bound Service

onCreate()
onBind()
onUnbind()
onDestroy()

创建以及使用StartService服务

  • 启动service
1,继承service 实现MyService,在onStrartCommand()中执行操作
2,在mainfest中注册MyService
3,在activity中启动Myservice,startService();
onStartCommand()返回值
  • START_STRICKY
  • START_NOT_STRICKY
  • START_REDELIVER_INTENT
4,关闭service,
  • 调用stopService();
  • stopSelf();

创建并启动IntentService

IntentService extend Service

  • 异步使用
  • 异步处理服务,实际上新开了一个线程:HandlerThread,在线程中发消息,然后接受处理完成后,会清楚线程
    必须有构造函数
    多了一个 onHandleIntent(Intent arg)方法

  • 如果onStartCammand() 方法返回了START_STRICT,那么onHandleIntent()不会执行

绑定及使用BoundService的步骤

Local BoundService
  • 继承Service 或者IntentService 类实现自己的服务
  • 在AndroidManifest中注册服务
  • 绑定服务bindService()
  • 取消绑定服务unbindService()
Messenger
AIDL

StartService 与 BoundService 区别

  • startService 和启动它的Activity不同生共死,而BoundService和启动它的Activity同生共死
  • 如果当前进程关闭,StartActivity消亡
  • 如果service已经启动,则不会再次启动,也就是不会再去执行onCreate()方法。 因为ArrayMap放着

在前台运行服务

启动方式 startForeground(int,notification)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值