Android Service初涉

一,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()));

你可能感兴趣的:(Android Service初涉)