一,Service概述
服务(Service)是Android系统中4个应用程序组件之一。服务主要用于两个目的:后台运行和跨进程访问
通过启动一个服务,可以在不显示界面的前提下在后台运行指定的任务,这样可以不影响用户做其他事情。
通过AIDL服务可以实现不同进程之间的通信,这也是服务的重要用途之一。
二,Service基础
Service并没有实际界面,而是一直在Android系统的后台运行。
一般使用Service为应用程序提供一些服务,或不需要界面的功能,例如,从Internet下载文件、控制Video播放器等。
这里我主要介绍Service的启动和结束过程(Service的生命周期)以及启动Service的各种方法
1.生命周期
Service与Activity一样,也有一个从启动到销毁的过程,但Service的这个过程比Activity简单得多。
一个服务实际上是一个继承android.app.Service的类
Service启动到销毁的过程只会经历如下3个阶段:
创建服务:调用 public void onCreate();
开始服务:调用 public void onStart(Intent intent, int startId);
销毁服务:调用 public void onDestroy();
一个服务只会创建一次,销毁一次,但可以开始多次,因此,onCreate和onDestroy方法只会被调用一次,而onStart方法会被调用多次。
2,创建和使用Service的步骤
(1)编写一个服务类,该类必须从android.app.Service继承。
public class MyService extends Service{
@Override
public IBinder onBind(Intent intent)
@Override
public void onCreate()
Service类涉及到3个生命周期方法,但这3个方法并不一定在子类中覆盖,可根据不同需求来决定使用哪些生命周期方法。
在Service类中有一个onBind方法,该方法是一个抽象方法,在Service的子类中必须覆盖。这个方法当Activity与Service绑定时被调用
(2)在AndroidManifest.xml文件中使用标签来配置服务。一般需要将标签的android:enabled属性值设为true,并使用android:name属性指定在第1步建立的服务类名
(3)如果要开始一个服务,使用startService方法,停止一个服务要使用stopService方法。此时需要使用Intent对象
//构造Intent对象
Intent serviceIntent = new Intent(this, MyService.class);
或者
Intent serviceIntent = new Intent("net.blogjava.mobile.myService");
Bundle bundle = new Bundle();
bundle.putInt("op", op);
serviceIntent.putExtras(bundle);
startService(serviceIntent); //启动服务
stopService(serviceIntent); //停止服务
三,系统服务
(1)获得系统服务
通过Activity类的getSystemService方法可以获得指定的对象(系统服务);
getSystemService方法只有一个String类型的参数,表示系统服务的ID,这个ID在整个Android系统中是唯一的
Android SDK在android.content.Context类中定义了这些ID:例如
public static final String AUDIO_SERVICE = "audio"; // 定义音频服务的ID
public static final String WINDOW_SERVICE = "window"; // 定义窗口服务的ID
public static final String NOTIFICATION_SERVICE = "notification"; // 定义通知服务的ID
(2)使用系统服务
// 获得WindowManager对象
android.view.WindowManager windowManager = (android.view.WindowManager).getSystemService(Context.WINDOW_SERVICE);
// 在窗口的标题栏输出当前窗口的宽度和高度,例如,320*480
setTitle(String.valueOf(windowManager.getDefaultDisplay().getWidth()) + "*"
+ String.valueOf( windowManager.getDefaultDisplay().getHeight()));