一.Service基础
1.什么是Service
Service是Android中实现程序后台运行的解决方案,是一个可以在后台执行长时间运行操作而没有用户界面的应用组件。
Service可由其他应用(如:Activity,Broadcast)组件启动,服务在启动后会一直在后台运行。
注意:Service(服务)和Broadcast(广播)有一个共同点。它们都是运行在主线程当中,不能耗时操作。
2.Service和Thread的区别
1.Thread是程序执行的最小单元,线程,可以用它来执行一些异步操作
Service是安卓的一种机制,当它运行的时候,如果是本地的Service,那么它对应的Service是运行在主线程上的。
2.Thread 运行是相对独立的,而Service运行是依赖于创建服务时所在的应用程序进程。
二.开启Service的两种方式和区别
1.startService
1.定义一个类继承Service
2.在AndroidManifest.xml中配置该service
3.使用Context的startService(startIntent)方法启动该Service
4.不在使用时调用stopService(stopIntent)方法停止该服务。
MyService 继承 Service
服务启动后,会先调用MyService中的onCreate()的方法。
在用startService启动这个服务时,就会调用onStartCommand方法,一旦调用这个方法,这个服务就会被正式开启。可以在这个方法中做自己的操作。
如果onStartCommand方法返回的是START_STICKY,意味着当整个Service因为内存不足而被系统杀掉的之后,一段时间内存再度空闲的时候,系统会尝试重新创建这个Service,创建成功后,又会调用onStartCommand方法,但其中的intent是空,这个值适合循环播放,天气预报这种服务。
当服务不在被使用的时候调用onDestroy()方法,Service可以在这个方法里面进行一些资源的清理(线程,注册的监听器,Content Provider),会进行回收。
2.bindService
bindService意味着在绑定服务的时候,服务和Activity已经处于绑定状态,绑定服务提供了一个客户端和服务端的接口,相当于Activity和Service交互的接口,它允许Activity和Service进行数据交互,发出请求获取结果等等。甚至如果Activity和Service在不同进程当中的时候,可以进行进程间通信来传输数据,这仅仅是在Activity和Service绑定之后才能运行,同时多个Activity可以绑定一个Service,但是绑定取消后,这个服务就会自动被销毁,并不像startService一样必须要调用stopService才能被销毁
bindService启动的方式:
1.创建Service,继承自Service并在类中,创建一个实现IBinder接口的实例对象并提供公共方法给Activity调用
2.从 onBind()回调方法返回此Binder实例。
3.Activity,从onServiceConnected()回调方法接收Binder,并使用提供的方法调用绑定服务。
和startService不同的是,它在MyService中实现了一个Binder的内部类
值得注意的是和startService不同的是,在onBind方法中它返回了一个Binder,这个downloadBinder是我们自己创建的
在Activity中我们要创建一个ServiceConnection的类,它代表的是Activity和Service的连接。
通过bindService(Intent service, ServiceConnection conn, int flags)方法,来启动Service
通过unbindService(ServiceConnection conn) 方法来停止Service