四大基本组件之Services
2016-01-12 22:25
435 查看
什么是Services,Services什么用?
Services是在后台运行,没有可视化的用户界面的程序。(Android系统现已经不允许只有Services的Android程序了,所以一个Android应用必须要有界面(有Activity)才能正常运行)
最容易理解的实例就是音乐播放器。如果把播放音乐的代码写在Activity里是不行的,当点击播放后退出界面到别的应用时音乐就不能继续播放了,因为Activity变得不可见了。后台播放音乐,这时就需要用Services了。
如何用Services
有两种方法启动Services服务程序,一种是通过Context.startService()来启动(通过调用Context.stopService()结束);另一种是通过调用Context.bindService()方法建立(调用
Context.unbindService()关闭),两种方法不同在于第二种调用要附着在别的程序上,比如mainActivity,Service通过暴露接口和mainActivity协同工作。同样用音乐播放器的实例来说明,Service暴露接口暂停、回退、停止等等播放音乐的接口给Activity从而让用户控制播放。
两种不同方法启动的Services生命周期是不一样的:
![](http://img.blog.csdn.net/20160113203513818?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
void onCreate()
void onStart(),这个方法已经是不推荐使用的了
![](http://img.blog.csdn.net/20160113203622558?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
取代的应该是onStartCommand()这个方法
void onDestroy()
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)
onCreate()和onDestroy()方法在两种生命周期中都有,也是做初始化和首尾的工作。
主要不同点在于用Context.bindService()启动的服务的生命周期中有onBind(),这里可以将设置好的信息传递给Service,而onUnbind()则可以可以将Services得到的结果返回回去,l另外通过调用onRebind()则可以继续进行Service。
不过要注意的是虽然用生命周期可以这么吧Service分为两种,但其实任何服务都可以接受onBind()和onUnbind()调用,两种生命周期是可能混杂在一起的。
这里可以继续使用日志工具进行理解熟悉。
新建一个MyService类
(智能的Android-Studio已经帮我们自动设置好了清单中的配置,这是建立所Activity和Service所必须的)
![](http://img.blog.csdn.net/20160113203836650?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
写一些生成日志的代码
然后在MainActivity中启动这个MyService
通过绑定启动service的代码比较麻烦,先略过。
Services是在后台运行,没有可视化的用户界面的程序。(Android系统现已经不允许只有Services的Android程序了,所以一个Android应用必须要有界面(有Activity)才能正常运行)
最容易理解的实例就是音乐播放器。如果把播放音乐的代码写在Activity里是不行的,当点击播放后退出界面到别的应用时音乐就不能继续播放了,因为Activity变得不可见了。后台播放音乐,这时就需要用Services了。
如何用Services
有两种方法启动Services服务程序,一种是通过Context.startService()来启动(通过调用Context.stopService()结束);另一种是通过调用Context.bindService()方法建立(调用
Context.unbindService()关闭),两种方法不同在于第二种调用要附着在别的程序上,比如mainActivity,Service通过暴露接口和mainActivity协同工作。同样用音乐播放器的实例来说明,Service暴露接口暂停、回退、停止等等播放音乐的接口给Activity从而让用户控制播放。
两种不同方法启动的Services生命周期是不一样的:
void onCreate()
void onStart(),这个方法已经是不推荐使用的了
取代的应该是onStartCommand()这个方法
void onDestroy()
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)
onCreate()和onDestroy()方法在两种生命周期中都有,也是做初始化和首尾的工作。
主要不同点在于用Context.bindService()启动的服务的生命周期中有onBind(),这里可以将设置好的信息传递给Service,而onUnbind()则可以可以将Services得到的结果返回回去,l另外通过调用onRebind()则可以继续进行Service。
不过要注意的是虽然用生命周期可以这么吧Service分为两种,但其实任何服务都可以接受onBind()和onUnbind()调用,两种生命周期是可能混杂在一起的。
这里可以继续使用日志工具进行理解熟悉。
新建一个MyService类
(智能的Android-Studio已经帮我们自动设置好了清单中的配置,这是建立所Activity和Service所必须的)
写一些生成日志的代码
@Override public void onCreate() { super.onCreate(); Log.d("running", "Service onCreate() running"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("running", "Service onStartCommand() running"); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. Log.d("running", "Service onBind() running"); throw new UnsupportedOperationException("Not yet implemented"); } @Override public boolean onUnbind(Intent intent) { Log.d("running", "Service onUnbind() running"); return super.onUnbind(intent); } @Override public void onRebind(Intent intent) { Log.d("running", "Service onRebind() running"); super.onRebind(intent); } @Override public void onDestroy() { Log.d("running", "Service onDestroy() running"); super.onDestroy(); }
然后在MainActivity中启动这个MyService
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("running", "Activity onCreate() running"); Intent intent = new Intent(this, MyService.class); startService(intent); stopService(intent); }
通过绑定启动service的代码比较麻烦,先略过。
相关文章推荐
- 正则表达式获取body内容
- window下使用sratoolkit将sra文件转换成fastq
- LeetCode OJ - Letter Combinations of a Phone Number
- iOS UIImageView
- java常用集合总结
- 198,自定义UITableViewCell(一)
- shells
- iOS nsdate
- 53. Maximum Subarray
- SRAtoolkit使用
- 数据段描述符和代码段描述符(二)——《x86汇编语言:从实模式到保护模式》读书笔记11
- 浅谈js怎么实现全选按钮
- Errors occurred during the build.
- nodejs Tips7
- 大叔也说Xamarin~Android篇~为HttpClient共享Session,android与api的session共享机制
- 数据段描述符和代码段描述符(二)——《x86汇编语言:从实模式到保护模式》读书笔记11
- [JAVA修炼之路四]-JVM内存模型以及对象实例化过程
- iOS 记录错误信息(附 源码)
- Hdaoop环境配置及中文分词加排序
- 使用URLConnection进行http请求