Android 中的Service解析

在Android系统中,到处可见service服务,service作为一个后台进程,执行一些特定的任务。在Android 应用开发过程中,不免也需要开发一些service来完成一些功能,而这种应用层的service只是整个Android Service这一概念的一部分而已,接下来将从Android系统平台的角度,详细剖析Android中的Service.

下面,举几个例子来看一下Android平台中service服务。
  1.继承自service的类,来实现自定义的service
     public class MyService extends Service{
              
     }
  2.通过调用getSystemService来获取服务
     1)获取TelephonyManager服务:
TelephonyManager tm = (TelephonyManager) context.getSyetemService(Context.THELEPHONY_SERVICE);
     2)获取ActivityManager服务:
ActivityManager mActivityManager=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
     3) 获取WifiManager服务:
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
  3.多媒体服务和相机服务的获取
     1)获取MediaPlayer服务
          
MediaPlayer mp = new MediaPlayer();
          try {
           mp.setDataSource("/sdcard/test.mp3");
           mp.prepare();
           mp.start();
          } catch (IllegalArgumentException e) {
           e.printStackTrace();
          }

     2)获取Camera服务
          
Camera myCamera;
          myCamera = Camera.open(); 

从AndroidMenifest.xml中的service 定义来看,下面是一个例子:
      
 <service 
     android:name="com.test.service.MyService" >
 </service>
 <service
     android:name="com.baidu.location.f"
     android:enabled="true"
     android:process=":remote" >
 </service>    
 MyService是一个本地应用服务,和应用程序是属于同一个进程;
 com.baidu.location.f是百度地图的服务,和应用程序不属于同一个进程;

Android服务分类:
从以上例子可以看出,service这一概念的使用方式有好几种,可以这样理解,从狭义上讲,service就是Android应用程序的四大组件之一;从广义上讲,service还包含系统中提供的其它系统级的service。
所以,从概念上,可以将service分为以下2类
1) . 应用程序服务:基于Android SDK的应用程序服务,需要通过继承service来实现,它又可以分为本地服务(注意和本地系统服务的区别)和远程服务。
    (1)  本地服务
       和activity处于同一进程,当activity所在的应用程序终止,这个服务也终止了;
       继承自service,通过bindService 或者startService来绑定;
       在AndroidMenifest.xml中,不用android:process=":remote"
    (2)  远程服务
       与activity的进程不是同一个进程,activity所在的应用终止,并不会终止远程服务。
       需要通过Android的binder IPC机制来绑定。
       在AndroidMenifest.xml中,必须用android:process=":remote"
    如MyService是一个本地服务,而com.baidu.location.f是一个远程服务。

2)  系统服务:处于framework以及framework层以下的服务。系统服务又可以分为java系统服务和本地系统服务
   (1)java系统服务
       可以认为是基于Framework层(属于system_server)的,可以用getSystemService来获取,如WifiManager,TelephonyManager,ActivityManager。
   (2)本地系统服务
       更加底层的服务(用c/c++编写,通常是一个独立的进程,而且它的父进程是init),如,surfaceflinger,mediaserver。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值