Android四大组件-Service
2017-08-03 11:17
211 查看
Service
不需要直接和用户交互,被设计用于长时间的后台操作。需要在Manifest中进行注册。
不是一个子线程。和别的组件一样运行在
Main Thread中,耗时操作需要另起新现成或者使用
IntentService,否则会造成ANR错误。
不是一个单独的进程,除非特殊声明。
可以通过
startForeground()方法指定前台服务,高优先级,不会被系统杀掉。
启动方式。
独立启动
Context.startService(),和启动它的组件无关,有自己的生命周期,在后台一直运行直到运行完成或者别的组件关闭了它。
使用场景:
后台音乐播放
后台下载
常驻型服务
绑定启动
Context.bindService(),和启动它的组件绑定,可以与绑定它的组件之间长时间交互。
使用场景:
前台音乐播放(UI更新)
数据计算,需要随组件启动和销毁,需要交互。
启动Service有两个额外的操作模式
4000
,设置方法为
onStartCommand():的返回值:
START_STICKY代表需要明确的启动和停止。
START_NOT_STICKYor
START_REDELIVER_INTENT代表没有明确的停止,会在后台一直运行。
绑定启动具体实现:
需要在service中定义
IBinder的子类,用于组件与Service之间通信。(其实也就是类似一个回调接口,没有明确规定,可以写任何方法和属性)
在启动Service的组件中,定义
ServiceConnection,用于得到IBinder实例,以及连接成功和断开连接的回调方法。
public class MService extends Service { private Notification mNotification; private class MyBinder extends Binder { void start() { Log.i("TAG", "startService"); } } private MyBinder mMyBinder = new MyBinder(); @Override public void onCreate() { super.onCreate(); mNotification = new Notification.Builder(this) .setSmallIcon(R.mipmap.icon) .build(); } @Override public IBinder onBind(Intent intent) { return mMyBinder; } @Override public int onStartCommand(Intent intent, int flags, int startId) { //前台服务 高优先级 startForeground(1, mNotification); //返回值决定额外的操作模式 return START_STICKY; } }
特殊用法:需要和组件之间进行通信,但是又不希望在组件停止之后就停止运行。先通过
Context.startService()启动service再调用
Context.bindService()进行绑定。实现绑定独立运行的服务。
相关文章推荐
- android四大组件之一Service详解(带实例及运行结果)
- Android学习日志11__四大组件02__service
- Android核心技术之(7)---四大应用组件之Service
- Android四大核心组件之Service
- 谈Android四大组件之Service篇
- Android四大组件之Service(二)
- Android 四大组件学习之 Service 服务
- Android中的四大组件Service
- Android开发四大组件之Service(实例篇)
- Android 四大组件系列之----Service 详解
- Android四大组件之Service
- Android四大组件之Service
- Android 四大组件之Service 的生命周期和使用
- Android学习笔记39:Android四大组件之Service
- [Android知识体系]之四大组件:service(intentService)
- Android的四大组件:Activity、Service、Content Provider、Broadcast Receiver
- Android 四大组件之Service
- Android四大基本组件之 Service
- android四大组件之Service(一)
- android四大组件之Service 简单音乐播放器