Android开发_Service组件

Service基础知识

Service(服务)是一个没有用户界面的在后台运行耗时操作的应用组件。其它应用组件能够启动Service,并且当用户切换到另外的应用场景时,Service将持续在后台运行。另外,一个组件能够绑定到Service与之交互(IPC)机制,例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行。

注意:service与activity一样都存在与当前进程的主线程中,所以,一些阻塞UI的操作,比如耗时操作不能放在service里进行,比如另外开启一个线程来处理诸如网络请求的耗时操作。如果在service里进行一些耗CPU和耗时操作,可能会引发ANR警告,这时应用会弹出是强制关闭还是等待的对话框。


Service的生命周期图:

 

context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy()

context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() ->onDestroy()


启动和关闭Service:

第一种方法:

public void myService(){
	Intent i = new Intent(MainActivity.this,MyService.class);
	startService(i);// 启动Service
	stopService(i);// 关闭Service
}
通过startService()启动的服务处于“启动的”状态,一旦启动,service就在后台运行,即使启动它的应用组件已经被销毁了。通常started状态的service执行单任务并且不返回任何结果给启动者。比如当下载或上传一个文件,当这项操作完成时,service应该停止它本身。


第二种方法:

public void myService() {
	Intent i = new Intent(MainActivity.this, MyService.class);
	// 绑定Service
	bindService(i, MainActivity.this, Context.BIND_AUTO_CREATE);
	// 取消绑定
	unbindService(MainActivity.this);
}

如果想通过bindService()方法来启动Service,那么调用该方法的类要实现ServiceConnection接口并重写下面两个方法:

// 成功绑定时调用
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {

}

// 绑定的Service崩时触发
@Override
public void onServiceDisconnected(ComponentName arg0) {

}
并且在Service的onBind()方法中不能返回null,否则绑定失败。可以在onServiceConnected()中获取到被绑定的Service在onBind()方法中返回的IBinder实例对象,通过该实例对象就可以与该Service进行交互。

注意:

1、当Service被创建一次之后,只要它还在运行,那么下次调用 它时就不会再重新创建,也就是所运行的Service实例对象只有一个。

2、通过bindService()方法可以创建并绑定Service,通过unbindService()方法可以取消绑定并销毁该Service;但是如果通过startService()方法来创建一个Service,再通过bindService()方法来绑定它,那么当调用unbindService()方法时只会取消该Service的绑定,而不会销毁该Service,只有再调用stopService()方法才能销毁该Service


public class MyService extends Service {
	private final MyServiceBinder binder = new MyServiceBinder();

	/**
	 * Service被绑定时候会调用该方法,如果该方法返回null, 那么就会绑定失败
	 */
	@Override
	public IBinder onBind(Intent arg0) {
		return binder;
	}

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

	@Override
	public void onCreate() {
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值