Android Service

 

Service分为两种,一种是Local Service,一种是Remote Service。
  LocalService当被开启之后就会一直运行在后台一直运行的,这里需要提到Android进程的一些地方了。
  Android进程首先它是一个Linux进程,一个Linux进程就是一个DVM实例,即当一个应用程序启动的时候,系统会开启一个Linux进程,而在Linux进程中会启动一个DVM实例,因为JAVA文件需要经过DVM编译成.dex文件之后才能够被识别,执行。而且,Linux进程是不能被程序员销毁的,只能由系统管理,这跟Windows系统区别很大,即使应用程序退出了,如果内存不是特别紧张的话,系统是不会把进程kill掉,因为进程里面有应用程序的一些信息,可以为应用程序的再次启动提供便利,比如说应用程序的包名,PID,UID,ICON。。。等等,也就是缓存了。我们可以在程序中把进程中的应用程序退出,但是进程是杀不掉的,依然能在进程管理中看到应用程序的进程。
  Android进程分为:Foreground Process:前台进程,正在运行着的Activity的进程。
  Visible Process:可视进程,能够在屏幕上显示的进程,但是该进程的应用程序没有获得焦点,不可操作
  Service Process:正在运行着Service,但是应用程序退出的进程
  Background Process:应用程序处于后台状态,比如说运行的时候按了HOME键,回到主界面。
  Empty Process:没有开启Service和Activity的进程
  这个问题的出现是因为之前的某一天,我在Activity里面开了一个线程,但是退出Activity之后,线程却还在持续运行,我就在想,不是Activity退出了吗?为什么线程还在运行?后来问了一些人,查了一些资料才发现,原来Linux进程是只能被系统回收的,而且只有在当内存紧张的时候,才会回收,当然,回收的顺序也是从后往上走的。Linux内核和Windows内核不同,Windows内核中实现了线程,而Linux却没有, Linux中最小的执行单元就是进程,它没有线程,所谓的线程其实就是一个轻量型的进程而已。这点比较重要。
  既然知道了Linux进程的一些特点,我们来继续走Service。Local Service通过startService(Intent intent)来启动,启动后会调用onCreate->onstart->onstartCommand->onDestroy。它启动之后会一直在后台运行,听歌,把Activity退出了或者是按下了Home键之后,Service依然会执行,或者在Service中注册BroadcasetReceiver,这样就能够在Service开启到结束期间接收广播并且做出相应了。当然,所需要的东西不同,按实际情况来决定要用到Service还是其他的东西吧。来看一下一个LocalService吧:

详细内容来博客看吧~有问题好交流http://www.apkbus.com/blog-17401-42098.html

 

posted @ 2012-10-09 15:57  amyy  阅读(822)  评论(0编辑  收藏  举报