深入探索Android Service
2014-02-24 17:00
295 查看
真的是好久没有写博客了,突然觉得自己有时候很容易放弃很多东西,好了,现在重新开始自己的博客之旅。
废话不多说了,首先是,之前也写过一个比较简单的Service解析的文章Android Service初解,但是当时对这个东西理解不是很深入,所以很多东西都是写的很简单的,最近开始看Android的开发文档,然后觉得对Service有了一些更深入的认识,现在写下来,避免以后忘记。
首先什么是Service,我们为什么要使用Service而不是别的组件?
在Android的四大基本组件(Actvitiy,Service,ContentProvider,BroadcastReceiver)中,Service能够为我们提供长时间的后台服务,并且可以实现进程间通信(IPC)
Service中涉及到的方法主要有以下几种:
1)onCreate():服务开始创建时,系统自动调用
2)onStartCommand():每次调用startService()时,系统自动调用
3)onBind():第一次调用bindService()时,系统调用。之后无论bindService()运行多少次,只要服务尚未被销毁,那么系统均会自动将第一次调取onBind()的返回值返回,避免重复调用
4)onDestory():服务销毁时调用
Service的启动方式有以下两种:
1)startService():
以startService()启动的服务,不依赖于应用而存在,当应用关闭后,服务仍然生存,故我们需要调用stopSelf()或者stopService()来结束服务。
2)bindService():
以bindService()启动的服务,在所有绑定他的组件unbindService()之后,就会自动销毁服务,而我们也无法使用stopSelf()或者stopService()来销毁这个服务。
在组件中调用bindService()后,会在onBind()方法中返回一个IBinder对象,这个对象通常会将Service类对象包含起来,用于在组件类中实现交互操作,故bindService()一般用于情况较复杂的时候,然后根据自身需求直接调用Service之中的方法。
常用的Service类:
有android.app.Service和android.app.IntentService。IntentService继承自Service,这两者的主要区别在于IntentService中的这些代码:
故每次启动IntentService,都会新建一个线程,并在新线程中调用onHandleIntent(),之后会自动结束Service。因此,每次调用IntentService()都会经历onCreate(),onStartCommand(),onDestory()的生命周期。而针对IntentService所调取的stopService()对他是没有无效的。
并且IntentService中,对于onBind()模块只是返回一个null值,并未做出其他处理,故一般仅有startService()中会使用到他,在bindService()中我们还是使用的Service。
最后,Service在默认情况下是运行于系统主线程中,所以当你在Service中运行耗时较久的服务,例如播放音乐或者网络连接服务时,最好新建线程处理,以避免出现ui堵塞的情况
废话不多说了,首先是,之前也写过一个比较简单的Service解析的文章Android Service初解,但是当时对这个东西理解不是很深入,所以很多东西都是写的很简单的,最近开始看Android的开发文档,然后觉得对Service有了一些更深入的认识,现在写下来,避免以后忘记。
首先什么是Service,我们为什么要使用Service而不是别的组件?
在Android的四大基本组件(Actvitiy,Service,ContentProvider,BroadcastReceiver)中,Service能够为我们提供长时间的后台服务,并且可以实现进程间通信(IPC)
Service中涉及到的方法主要有以下几种:
1)onCreate():服务开始创建时,系统自动调用
2)onStartCommand():每次调用startService()时,系统自动调用
3)onBind():第一次调用bindService()时,系统调用。之后无论bindService()运行多少次,只要服务尚未被销毁,那么系统均会自动将第一次调取onBind()的返回值返回,避免重复调用
4)onDestory():服务销毁时调用
Service的启动方式有以下两种:
1)startService():
以startService()启动的服务,不依赖于应用而存在,当应用关闭后,服务仍然生存,故我们需要调用stopSelf()或者stopService()来结束服务。
2)bindService():
以bindService()启动的服务,在所有绑定他的组件unbindService()之后,就会自动销毁服务,而我们也无法使用stopSelf()或者stopService()来销毁这个服务。
在组件中调用bindService()后,会在onBind()方法中返回一个IBinder对象,这个对象通常会将Service类对象包含起来,用于在组件类中实现交互操作,故bindService()一般用于情况较复杂的时候,然后根据自身需求直接调用Service之中的方法。
常用的Service类:
有android.app.Service和android.app.IntentService。IntentService继承自Service,这两者的主要区别在于IntentService中的这些代码:
private final class ServiceHandler extends Handler { public ServiceHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { onHandleIntent((Intent)msg.obj); stopSelf(msg.arg1); } } @Override public void onCreate() { super.onCreate(); HandlerThread thread = new HandlerThread("IntentService[" + mName + "]"); thread.start(); mServiceLooper = thread.getLooper(); mServiceHandler = new ServiceHandler(mServiceLooper); } @Override public void onStart(Intent intent, int startId) { Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); }
故每次启动IntentService,都会新建一个线程,并在新线程中调用onHandleIntent(),之后会自动结束Service。因此,每次调用IntentService()都会经历onCreate(),onStartCommand(),onDestory()的生命周期。而针对IntentService所调取的stopService()对他是没有无效的。
并且IntentService中,对于onBind()模块只是返回一个null值,并未做出其他处理,故一般仅有startService()中会使用到他,在bindService()中我们还是使用的Service。
最后,Service在默认情况下是运行于系统主线程中,所以当你在Service中运行耗时较久的服务,例如播放音乐或者网络连接服务时,最好新建线程处理,以避免出现ui堵塞的情况
相关文章推荐
- Android Service学习之IntentService 深入分析
- Android 核心分析 之七Service深入分析
- Android里Service的bindService()和startService()混合使用深入分析
- Android开发艺术探索__android动画深入分析(七)
- Android 核心分析 之七------Service深入分析
- Android的Service深入分析
- Android Service学习之IntentService 深入分析
- 深入剖析Android四大组件(二)——Service服务之启动与绑定
- Android 开发艺术探索笔记 第七章 Android动画深入分析
- Android深入理解Context(二)Activity和Service的Context创建过程
- Android Service学习之IntentService 深入分析
- Android 控件ListView 条目响应深入探索
- Android 源码系列之<七>从源码的角度深入理解IntentService及HandlerThread
- Android里Service的bindService()和startService()混合使用深入分析
- Android中深入研究Service
- Android Service学习之IntentService 深入分析
- 深入理解Android的startservice和bindservice
- Android 核心分析 之六------Service深入分析 .
- android Activity和service深入介绍
- 深入剖析Android四大组件(六)——相对完美的后台Service实现播放音乐功能