android service的简单使用

时间:2021-10-14 16:31:02

定义一个服务

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

package com.jack.servicetest;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}

```目前MyService中只用一个onBind()方法,这个方法是Service中唯一的一个抽象方法,所以必须要在子类里实现。既然定义了一个服务,自然应该在服务中去处理一些事情,那处理事情的逻辑应该写在哪里?这时我们就可以重写Service中的另外一些方法了,如下所示:





<div class="se-preview-section-delimiter"></div>

这里写代码片
“`

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class MyService extends Service {

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return super.onStartCommand(intent, flags, startId);
}
}

可以看到,这里我们又重写了onCreate(),onDestroy()和onStartCommand(Intent intent, int flags, int startId)这三个方法,它们是每个服务中最常用到的三个方法。其中onCreate方法会在服务创建的时候调用,onStartCommand方法会在每次服务启动的时候调用。onDestroy()方法会在服务销毁的时候调用。

通常情况下,如果我们希望服务一旦启动就立刻去执行某个动作,就可以将逻辑写在onStartCommand方法里。而当服务销毁时,我们又应该在onDestroy()方法中去回收那些不在使用的资源。

另外需要注意的是,没一个服务都需要在AndroidManifest.xml文件中进行注册才能生效,android四大组件都需要进行注册。于是我们修改AndroidManifest.xml文件,代码如下所示:

<manifest android:versioncode="1" android:versionname="1.0" package="com.jack.servicetest" xmlns:android="http://schemas.android.com/apk/res/android"><uses-sdk android:minsdkversion="13" android:targetsdkversion="17">
</uses-sdk></manifest>


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




启动和停止服务

定义好了服务后,接下来就应该考虑如何启动以及停止这个服务。启动服务和停止服务主要借助Intent来实现,下面我们在ServiceTest项目中尝试去启动已经停止MyService这个服务。

首先修改activity_main.xml中的代码,如下所示:

上面的布局主要加入了2个按钮,用来启动和停止服务。

然后修改MainActivity中的代码,如下所示:

package com.jack.servicetest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

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 boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
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 service按钮的点击事件里,我们同样构建出了一个Intent对象,并调用
stopService()方法来停止MyService这个服务。startService()和stopService()方法都是定义在Context
类中的,所以我们在活动里可以直接调用这两个方法。注意,这里完全是由活动来决定服务何时停止的,如果没有点击stop service
按钮,服务就会一直处于运行状态。那服务有什么办法让自己停下来了?只需要在MyService的任何一个位置调用shopSelf()
方法就能让服务停止下来了。
onCreate方法和onStartCommand方法的区别:onCreate方法是在服务第一次创建的时候调用的,而onStartCommand方法则在每次启动服务的时候都会调用,由于刚才我们是第一次点击start service按钮,服务此时还未创建过,所以两个方法都会执行,之后如果你在连续多点击几次start service按钮,你就会发现只有onStartCommand方法可以得到执行了。
原文地址:
http://www.2cto.com/kf/201501/367258.html