目录
一,Service简介
Service服务,是指执行指定系统功能的程序,例程或进程,以便支持其他程序,并且运行期间用户不可见的一种活动机制,例如:后台播放音乐,后台下载等;
Service和Activity同属于一个级别,不同于子线程,service是运行在主线程中的,因此不能进行耗时操作;
二,Service的两种启动方式
(1)非绑定式启动(startService):
- 服务开启后与启动者没有任何关系,service的生命周期独立于启动者,启动者退出,service仍会运行;
- 启动者无法调用service中的方法;
(2)绑定式启动(bindService)
- 启动者(Activity)会和service绑定在一起,两者的生命周期会同步,当启动者退出时,service会跟着被销毁;
- 启动者可以调用service中的方法;
1,非绑定式启动Service
(1) 创建一个类继承Service类,并重写一系列方法:
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i("MyService", "onBind: ");
return null;
}
@Override
public void onCreate() {
Log.i("MyService", "onCreate: ");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("MyService", "onStartCommand: ");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i("MyService", "onDestroy: ");
super.onDestroy();
}
}
(2)在Manifest文件中注册指定Service:
(3)调用startService(Intent intent)方法启动Service:
private void startMyService() {
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
2,绑定式启动Service
(1)前两步与非绑定式启动一致,创建Service子类并注册Service:
public class MyBindService extends Service {
private final String TAG = "MyBindService";
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind: ");
return new MyBinder(this);
}
@Override
public void onCreate() {
Log.i(TAG, "onCreate: ");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand: ");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy: ");
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "onUnbind: ");
return super.onUnbind(intent);
}
}
(2)绑定式启动Service需要调用bindService()方法,这个方法需要三个参数:
private void startBindService() {
Intent intent = new Intent(this, MyBindService.class);
isBound = bindService(intent, conne