Service详解

    xiaoxiao2022-07-14  175

    一.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

    最新回复(0)