Android——本地服务基础(一)

简介:                         本地服务用于应用程序内部,可以实现应用程序自己的一些耗时任务,比如查询升级信息,网络传输,或者在一些场合需要在后台执行,比如播放音乐,并不占用应用程序比如activity所属的线程,而是单开线程后台执行,这样用户体验比较好。


                 

      本地服务用于应用程序内部,可以实现应用程序自己的一些耗时任务,比如查询升级信息,网络传输,或者在一些场合需要在后台执行,比如播放音乐,并不占用应用程序比如activity所属的线程,而是单开线程后台执行,这样用户体验比较好。


一,本地服务的启动方式


          1,Context.bindService

                           

1,绑定时,bindService——onCreate()——onBind()


bindService(Intent intent,ServiceConnection conn,int flags)


参数说明:

1intent:Intent对象,需要定义指向服务器


2conn:ServiceConnection接口对象,创建该对象要实现它的onServiceConnected(系统调用该方法来传递由ServiceonBind方法返回的IBinder)和onServiceDisconnected(Service的连接意外丢失,比如当Service崩溃或者被杀时,系统会调用该方法)来判断连接成功或者是断开连接


3bindService之后会自动调用ServiceConnection接口里面的onServiceConnected方法;但是如果执行unbindService方法之后不会自动调用这个接口里面的onServiceDisconnected方法,也就是说执行unbindService只是告诉系统已经和这个服务没有关系了,同时在系统内存不足的时候可以优先杀死这个服务。

 

注意:Service和需要绑定的Activity在一个包内,否则将无法调用ServiceConnection接口中的上述方法。

 

    2,解除绑定时,unbindService——onUbind——onDestory

 

如果调用者(例如Activity)直接退出,Service由于与调用者绑定在一起,则Service会随着调用者一同停止。


Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate方法,接着调用onBind方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会调用服务的onUnbind方法,接着调用onDestroy方法。

 

如果调用bindService方法前服务已经被绑定,多次调用context.bindService方法并不会导致多次创建服务及绑定。


如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService方法,调用该方法也会导致系统调用服务的onUnbind——onDestroy方法




    2,Context.startService

                                   

          1,启动时,startService——onCreate——onStart

          2,停止时,stopService——onDestroy

 

     此时如果调用者直接退出而没有停止Service,Service会一直在后台运行。

          Context.startService方法启动服务,在Service未被创建的时候,会先调用ServiceonCreate方法,然后再调用OnStart方法.

     采用StartService启动的服务,只能调用stopService方法结束服务,服务结束时候会调用onDestroy方法




二,生命周期

 

                      

Service生命周期一般有两种运行模式。

 

1,通过Context.startService方法开始,以Context.stopService方法结束,

可以通过Service.stopSelf或者Service.stopSelfResult方法停止自身。stopService只需调用一次便可以将服务停止。

 

2,通过接口被外部程序调用。外部程序建立一个到Service的连接,通过这个连接来操作Service.创建连接开始于Context.bindService,结束于Context.unbindService多个客户端绑定到同一个Service


                     









目录
相关文章
|
6月前
|
Android开发
Android 11 添加Service服务SELinux问题
Android 11 添加Service服务SELinux问题
321 1
|
6月前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
309 0
|
18天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
16 1
|
5月前
|
调度 Android开发
43. 【Android教程】服务:Service
43. 【Android教程】服务:Service
55 2
|
2月前
|
JavaScript 前端开发 Android开发
让Vite+Vue3项目在Android端离线打开(不需要起服务)
让Vite+Vue3项目在Android端离线打开(不需要起服务)
|
2月前
|
调度 Android开发 UED
Android经典实战之Android 14前台服务适配
本文介绍了在Android 14中适配前台服务的关键步骤与最佳实践,包括指定服务类型、请求权限、优化用户体验及使用WorkManager等。通过遵循这些指南,确保应用在新系统上顺畅运行并提升用户体验。
173 6
|
2月前
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
|
2月前
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
|
3月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
3月前
|
数据采集 编解码 开发工具
Android平台实现无纸化同屏并推送RTMP或轻量级RTSP服务(毫秒级延迟)
一个好的无纸化同屏系统,需要考虑的有整体组网、分辨率、码率、实时延迟、音视频同步和连续性等各个指标,做容易,做好难