您的位置:首页 > 其它

Service

2015-08-26 15:47 316 查看
Service与Activity都是Android系统中的运行单元,只是后者有接口布局文件作为其操作界面,而前者无操作界面,专门负责运行一项制定的工作,直到完成或被其控制程序停止。

Service与Thread很相似,都是独立运行的对象,也是幕后运行无界面,Thread是java内建类,而Service是Android根据其特性和架构设计的,所以在Android中优先建议使用Service。

Service的两种调用方法:startService();bindService()。

Service的生命周期:

startService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onDestroy()

bindService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onUnbind()、onDestroy()

1、新建一个继承Service的新类,利用右键Source > Override/Implement Methods 重写onCreate()、onStartCommand()、onDestroy()、onUnbind():

package com....;

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

public class MyService extends Service {

public class LocalBinder extends Binder
{
MyService getService() {
return MyService.this;
}

}
private LocalBinder mLocBin = new LocalBinder();
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mLocBin;
}

@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);
}

@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
return super.onUnbind(intent);
}

}


其中onBind()方法必须传回类中建立的一个LocalBinder类的对象,否则无法完成Bind Service的动作。LocalBinder是内部类,继承Binder类,其中有getService方法,传回MyService对象,就是根据这个方法才能调用bindService()时取得MyService对象。

2、在AndroidManifest.xml中注册Service:

<service android:name=".MyService" android:enabled="true" />


3、在程序中启动Service:

startService():

Intent it = new Intent(类名称.this,Service类名称.class);
startService(it);
...
stopService(it);


bindService():

首先建立ServiceConnection对象,取得Service对象,并存入定义在主程序中的MyService属性;

onServiceConnected()在bind Service时系统调用;onServiceDisconnected()在Service对象不正常结束时运行,一般情况不允许。

private  ServiceConnection mServConn = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub

}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
//取得Service对象
MyService mMyServ = ((MyService.LocalBinder)service).getService();
}
};


2、建立Intent对象并指定要启动的Service类,调用bindService()。

Intent it = new Intent(类名称.this,Service类名称.class);
bindService(it, mServConn, BIND_AUTO_CREATE);
...
unbindService(mServConn);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: