8.2.1. 创建 UpdaterService 类

优质
小牛编辑
130浏览
2023-12-01

8.2.1.创建 UpdaterService 类

创建 Service 的过程与创建 Activity 或者其它基础构件类似,首先创建一个类,继承 Android 框架中提供的基类。

先新建一个 Java 文件。在 src 目录中选择你的 Java package ,右键选择 New→Class ,在 class name 一栏输入 UpdaterService 。这样就在 package 中新建出来一个 UpdaterService.java 文件。

回忆一下,在 "Service" 一节有提到过一般的 Service 的生存周期,如图8.1 "Service的生命周期":

图8.1.Service的生命周期

接下来,我们需要覆盖几个相关的方法:

  1. onCreate()在 Service 初始化时调用。
  2. onStartCommand()在 Service 启动时调用。
  3. onDestory()在 Service 结束时调用。

这里可以使用Eclipse的辅助工具,进入 Source→Override/Implement Methods ,选上这三个方法即可。

鉴于“最小可用”原则,我们在学习的时候也该从简入手。到这里,先只在每个覆盖的方法中记录些日志。我们Service的样子大致如下:

例 8.3. UpdaterService.java, version 1

package com.marakana.yamba3;

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.util.Log;

public class UpdaterService1 extends Service {

static final String TAG = "UpdaterService"; //

@Override

public IBinder onBind(Intent intent) { //

return null;

}

@Override

public void onCreate() { //

super.onCreate();

Log.d(TAG, "onCreated");

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) { //

super.onStartCommand(intent, flags, startId);

Log.d(TAG, "onStarted");

return START_STICKY;

}

@Override

public void onDestroy() { //

super.onDestroy();

Log.d(TAG, "onDestroyed");

}

}

  1. 因为频繁地使用Log.d(),我会在所有主要的类中声明一个TAG常量。
  2. onBind()在Bound Service中使用,它会返回一个Binder的具体实现。在这里还没有用到Bound Service,因此返回null。
  3. onCreate()调用于Service初次创建时,而不一定是startService()的结果。可以在这里做些一次性的初始化工作。
  4. onStartCommand()调用于Service收到一个startService()的Intent而启动时。对已经启动的Service而言,依然可以再次收到启动的请求,这时就会调用onStartCommand()。
  5. onDestory()调用于Service收到一个stopService()的请求而销毁时。对应onCreate()中的初始化工作,可以在这里做一些清理工作。