【Android基础】四大组件之Service
in 博客目录

本文介绍了四大组件之Service的相关内容。
概念
Service,即服务,主要用于在后台执行长时间运行的操作。它提供了一种标准的方式来执行异步任务。可以让应用完成后台任务的部署。同时,还可以建立进程间通信,使得不同应用可以共享数据,而不需要了解对方的内部实现。
Service的创建与使用
Service的使用分为以下几个步骤:
- 手动创建Service的子类。
- 在AndroidManifest.xml文件中注册这个Service。
- 实现Service的抽象方法。
- 通过start或者bind的方法启动service
代码示例:
<service android:name=".MyService" />
Service的生命周期
Service的生命周期分为以下几个阶段:
- onCreate():Service被创建时调用。
- onStartCommand():Service被启动时调用。
- onBind():Service被绑定时调用。
- onUnbind():Service被解绑时调用。
- onDestroy():Service被销毁时调用。
Service的分类
Service分为以下几种类型:
- 前台Service:前台Service会一直保持运行状态,并且会显示在通知栏中。
- 后台Service:后台Service会在系统内存不足时被回收。
- 绑定Service:绑定Service会在Service和客户端之间建立一个连接,并且可以在客户端和Service之间传递数据。
Service的启动方式
Service的启动方式分为以下几种:
- startService():启动Service,但是Service会在后台运行,并且不会和调用者有直接的联系。
- bindService():绑定Service,Service会和调用者建立一个连接,并且可以在客户端和Service之间传递数据。
- startForeground():启动前台Service,Service会在通知栏中显示一个通知,并且可以在通知栏中进行操作。
代码示例:
// 1. 启动Service
Intent intent = new Intent(this, MyService.class);
startService(intent);
// 2. 绑定Service
Intent intent = new Intent(this, MyService.class);
// 创建一个ServiceConnection对象,并重写两个方法:
// onServiceConnected():Service连接成功时调用。
// onServiceDisconnected():Service连接断开时调用。
ServiceConnection connection = new MyServiceConnection(){
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 获取Service的实例
MyService myService = ((MyService.MyBinder)service).getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
// Service连接断开时调用
}
};
bindService(intent, connection, Context.BIND_AUTO_CREATE);
unbindService(connection);
stopService(intent);
直接start时,如果创建成功,Service内部会回调onCreate方法,然后回调onStartCommand方法。启动前台Service时,一样会回调onStartCommand方法,然后回调onStartForeground方法。
bind时,会回调onCreate方法,然后回调onBind方法。
结束Service的方式
结束Service的方式分为以下几种:
- stopService():停止Service,通过start方式拉起的Service在停止之后会被销毁。回调onDestroy()方法。
- unbindService():解除Service和调用者的连接。当所有的调用者都解除连接时,Service会被销毁。
Service被销毁时,会回调onDestroy()方法,我们就可以在这里做一些清理工作。
代码示例:
// 停止Service
Intent intent = new Intent(this, MyService.class);
stopService(intent);
// 解除Service和调用者的连接
unbindService(connection);
另外,service内部也可以自己停止,调用stopSelf()方法。
// 停止Service
stopSelf();