Android之服务

Android之服务

一,服务简介

了解了 Android 多线程编程的技术之后,下面就让我们进入到本章的正题,开始对服务
的相关内容进行学习。 作为 Android 四大组件之一, 服务也少不了有很多非常重要的知识点,
那我们自然要从最基本的用法开始学习了。

二,定义一个服务

首先看一下如何在项目中定义一个服务。 新建一个 ServiceTest项目, 然后在这个项目中
新增一个名为 MyService 的类,并让它继承自 Service,完成后的代码如下所示:

public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
}

目前 MyService 中可以算是空空如也,但有一个 onBind()方法特别醒目。这个方法是
Service 中唯一的一个抽象方法,所以必须要在子类里实现。我们会在后面的小节中使用到
onBind()方法,目前可以暂时将它忽略掉。
既然是定义一个服务,自然应该在服务中去处理一些事情了,那处理事情的逻辑应该写
在哪里呢?这时就可以重写 Service 中的另外一些方法了,如下所示:

public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}

可以看到,这里我们又重写了 onCreate()、onStartCommand()和 onDestroy()这三个方法,
它们是每个服务中最常用到的三个方法了。其中 onCreate()方法会在服务创建的时候调用,
onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法会在服务销毁的时候
调用。
通常情况下,如果我们希望服务一旦启动就立刻去执行某个动作,就可以将逻辑写在
onStartCommand()方法里。而当服务销毁时,我们又应该在 onDestroy()方法中去回收那些不
再使用的资源。
另外需要注意,每一个服务都需要在 AndroidManifest.xml文件中进行注册才能生效,不知
道你有没有发现, 这是 Android四大组件共有的特点。 于是我们还应该修改 AndroidManifest.xml
文件,代码如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.servicetest"
android:versionCode="1"
android:versionName="1.0" >
……
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
……
<service android:name=".MyService" >
</service>
</application>
</manifest>

这样的话,就已经将一个服务完全定义好了。

二,启动与停止服务

定义好了服务之后,接下来就应该考虑如何去启动以及停止这个服务。启动和停止的方
法当然你也不会陌生,主要是借助 Intent 来实现的,下面就让我们在 ServiceTest 项目中尝试
去启动以及停止 MyService 这个服务。
首先修改 activity_main.xml 中的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/start_service"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Service" />
<Button
android:id="@+id/stop_service"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Stop Service" />
</LinearLayout>

这里我们在布局文件中加入了两个按钮,分别是用于启动服务和停止服务的。
然后修改 MainActivity 中的代码,如下所示:

public class MainActivity extends Activity implements OnClickListener {
private Button startService;
private Button stopService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService = (Button) findViewById(R.id.start_service);
stopService = (Button) findViewById(R.id.stop_service);
startService.setOnClickListener(this);
stopService.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start_service:
Intent startIntent = new Intent(this, MyService.class);
startService(startIntent); // 启动服务
break;
case R.id.stop_service:
Intent stopIntent = new Intent(this, MyService.class);
stopService(stopIntent); // 停止服务
break;
default:
break;
}
}
}

可以看到,这里在 onCreate()方法中分别获取到了 Start Service 按钮和 Stop Service 按钮
的实例,并给它们注册了点击事件。然后在 Start Service 按钮的点击事件里,我们构建出了
一个 Intent 对象,并调用 startService()方法来启动 MyService 这个服务。在 Stop Serivce 按钮
的点击事件里, 我们同样构建出了一个Intent对象, 并调用stopService()方法来停止MyService
这个服务。startService()和 stopService()方法都是定义在 Context 类中的,所以我们在活动里
可以直接调用这两个方法。注意,这里完全是由活动来决定服务何时停止的,如果没有点击
Stop Service 按钮, 服务就会一直处于运行状态。 那服务有没有什么办法让自已停止下来呢?
当然可以, 只需要在 MyService 的任何一个位置调用 stopSelf()方法就能让这个服务停止下
来了。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值