要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法。
现在我们把Activity与Service绑定在一起,那就是Service要随着程序的退出而终止,此时调用的方法为bindService方法,方法如下:
A. 编写需要运行在后台的类继承自android.app.Service。
public class MyService extends Service {
//服务生命周期 创建,开始,销毁
/**
* 创建
*/
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d("info", "Service Create");
}
/*
* 开始
* (non-Javadoc)
* @see android.app.Service#onStart(android.content.Intent, int)
*/
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Log.d("info", "Service Start");
}
/**
* 销毁
*/
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("info", "Service Destroy");
}
/**
* 当Service与Activity成功绑定时调用这个方法(non-Javadoc)
* @see android.app.Service#onBind(android.content.Intent)
*/
@Override
public IBinder onBind(Intent arg0) {
Log.d("info","Service Bind Success");
return null;
}
/**
* 重新绑定
*/
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
Log.d("info","Service ReBind Success");
}
/**
* 取消绑定
*/
@Override
public boolean onUnbind(Intent intent) {
Log.d("info","Service Unbind Success");
return super.onUnbind(intent);
}
}
B. 在AndroidManifest.xml中配置<service>标签
<service android:name=".MyService" android:enabled="true" ></service>
C. 绑定服务:
(1) 通过使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成
由该方法的第二个参数可以确定第二步要做什么
(2) 编写类实现ServiceConnection 接口
class MyServiceConnection implements ServiceConnection
{
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
Log.d("info", "Service Connection Success");
//成功连接服务,该方法被执行。在该方法中可以通过IBinder对象取得onBind方法的返回值,一般通过向下转型
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
Log.d("info", "Service Connection Filed");
//连接失败执行
}
}
(3)使用
class BtnClick implements OnClickListener
{
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this,MyService.class);
MyServiceConnection myServiceConnection = new MyServiceConnection();
switch (arg0.getId()) {
case R.id.btnStart:
Main.this.startService(intent);
break;
case R.id.btnStop:
Main.this.stopService(intent);
break;
case R.id.btnBind:
Main.this.bindService(intent,myServiceConnection ,Context.BIND_AUTO_CREATE);
break;
case R.id.btnUnBind:
//ServiceConnection必须是全局变量否则此处报错
Main.this.unbindService(myServiceConnection );
break;
default:
break;
}
}
}
***开启service有两种方法,一种startService,另一种是bindService。如果两种方法同时使用的话,不论是先启用startService先还是启用bindService先,都需要先等待解除绑定服务再能调用stopService方法,程序才会自动回调destroy。不论是先启用startService先还是启用bindService先,然后再退出程序,以startService启动的服务忍然需要当程序再次启动后调用stopService停止服务。