概念
Service (服务) 是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。
Service可由其他应用组件启动(如 Activity ),服务一旦被启动将在后台一直运行,即使启动服务的组件( Activity )已销毁也不受影响。
生命周期
service生命周期.jpeg
开启service的两种方式
- startService()
- 定义一个类继承Service
- 在Manifest.xml文件中配置该Service
- 使用Context的startService方法启动service
- 使用Context的stopService方法关闭service
该启动方式,app 杀死、Activity 销毁没有任何影响,服务不会停止销毁。
- bindService()
- 新建Service类BindService。在BindService类里新建内部类MyBinder,继承自Binder(Binder实现IBinder接口)。MyBinder提供方法返回BindService实例。
实例化MyBinder得到mybinder对象;public class MyBinderextends Binder{ public BindService getService(){ return BindService.this; } }
重写onBind()方法:@Override public IBinder onBind(Intent intent) { return mybinder; }
- 在Activity里,实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法
ServiceConnection conn = new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { } @Override public void onServiceDisconnected(ComponentName name) { } };
- 在Activity的onCreate()方法里,新建Intent,并绑定服务
Intent intent=new Intent(MainActivity.this,BindService.class); bindService(intent, conn,BIND_AUTO_CREATE);
- 在Activity的onDestroy里面,添加
unbindService(conn);
该启动方式依赖于客户端生命周期,当客户端 Activity 销毁时, 没有调用 unbindService() 方法 , Service 也会停止销毁。
IntentService
-
定义
IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能。
2 特征- 会创建独立的 worker 线程来处理所有的 Intent 请求;
- 会创建独立的 worker 线程来处理 onHandleIntent() 方法实现的代码,无需处理多线程问题;
- IntentService 在执行 onCreate 操作的时候,内部开了一个线程,去你执行你的耗时操作。
- 所有请求处理完成后,IntentService会自动停止,无需调用 stopSelf() 方法停止 Service ;