问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何让android的service一直在后台运行

发布网友 发布时间:2022-04-26 19:08

我来回答

1个回答

热心网友 时间:2022-06-28 19:26

Started Service的生命周期:
onCreate():创建服务

onStartCommand():服务开始运行(在2.0以前版本中,使用onStart()回调方法)

onDestroy() :服务被停止

【详细说明:】
在程序中调用:context.startService() 会触发执行Service生命周期中的onCreate()、onStartCommand()回调方法,此时服务就开始正式运行;
如果Service还没有运行,则android先调用onCreate()然后调用onStartCommand();如果Service已经运行,则只调用onStartCommand(),所以一个Service的onStartCommand方法可能会重复调用多次;
如果在程序中调用:context.stopService()会触发执行Service生命周期中的onDestroy()回调方法,会让服务停止;
stopService()的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService()的话,Service会一直在后台运行。该Service的调用者再启动该Service后可以通过stopService关闭Service;stopSelf()
所以StartService的生命周期为:onCreate --> onStartCommand(可多次调用) --> onDestroy。

Service运行在后台,它是不可见的、无界面的程序 Service运行在主线程中;最好在Service中启动新线程来运行耗时的任务

为什么不使用后台线程而使用Service?
· 1、Service可以放在独立的进程中,所以更安全;
· 2、使用Service可以依赖现有的binder机制,不需要在应用层面上处理线程同步的繁杂工作;
· 3、系统可以重新启动异常死去的Service。
服务的分类
1本地服务 2远程服务
启动服务的方法
1)、 Context.startService()
调用者与服务之间没有关联,即使调用者退出,服务仍可运行
2)、 Context.bindService()
调用者与服务绑定在一起,调用者一旦退出,服务也就终止
a 本地服务的分类:
StartedService 被启动服务
被启动的服务是由其它组件调用startService()方法而启动的,onStartCommand()被回调,除非调用stopSelf()或stopService()来停止该服务。否则该服务还可以在后台无限期运行
BoundService 绑定服务
绑定服务是允许其它应用程序绑定并且与之交互的Service的实现类。为了提供绑定,必须实现onBind()回调方法。该方法返回IBinder对象,它定义了服务类与Activity交互的程序接口。
根据onStartCommand()的返回值还划分为:粘性服务和非粘性服务
· START_STICKY(常量值:1):sticky的意思是“粘性的”。使用这个返回值时,我们启动的服务跟应用程序"粘"在一起,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务。当再次启动服务时,传入的第一个参数将为null;
· START_NOT_STICKY(常量值:2):“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
· START_REDELIVER_INTENT(常量值:3):重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
b远程服务

远程服务是吧数据暴露出来 由其他应用程序调用
1、Started Service的生命周期:
· onCreate():创建服务
· onStartCommand():服务开始运行(在2.0以前版本中,使用onStart()回调方法)
· onDestroy() :服务被停止
调用startedservice会调用服务里的onstartedcommand方法 如果第一次调用会调用oncreate方法 。
调用stopservice会调用服务里的ondestroy()

2、Bound Service的生命周期:
· onCreate():创建服务
· onBind():绑定服务,服务开始运行
· onUnbind():取消绑定
· onDestroy() :服务被停止
· 在程序中调用:context.bindService()会触发执行Service生命周期中的onCreate()、onBind()回调方法,此时服务开始运行;
· onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。此后调用者(Context,例如Activity)会和Service绑定在一起;
· 如果调用Service的调用者Context退出了,那么会依次调用Service生命周期中的onUnbind()、onDestroy()回调方法,会让服务停止;
· 所以BindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
· Service是不能自己启动
IntentService和Service
· 生成一个默认的且与主线程互相独立的工作者线程来执行所有传送至 onStartCommand() 方法的Intetnt
· 生成一个工作队列来传送Intent对象给你的onHandleIntent()方法,同一时刻只传送一个Intent对象,这样一来,你就不必担心多线程的问题。
· 在所有的请求(Intent)都被执行完以后会自动停止服务,所以,你不需要自己去调用stopSelf()方法来停止该服务
· 提供了一个onBind()方法的默认实现,它返回null
· 提供了一个onStartCommand()方法的默认实现,它将Intent先传送至工作队列,然后从工作队列中每次取出一个传送至onHandleIntent()方法,在该方法中对Intent对相应的处理
IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程。
这里就给我们提供了一个思路,如果有耗时的操作可以在Service里面开启新线程,也可以使用IntentService来处理耗时操作。 但你若是想在Service中让多个线程并发的话,就得使用第一种方法,在Service内部起多个线程,但是这样的话,你可要处理好线程的同步。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
新生儿脐疝的诊断与鉴别 小儿脐疝发病原因 导致新生儿脐疝发作的原因有哪些? 腾讯视频2023年10月24日免费会员账号分享-腾讯视频2023年10月24日免 ... 百度网盘激活码免费领取2024 百度网盘激活码免费领取最新分享 我是男生 今年18周岁 我身高172是不是完蛋了 我还会长吗? 估计还能长... 开荒保洁一平米多少钱 物业开荒费用包括哪些 公司保洁开荒多少钱一平 开封灌汤包哪家正宗 开封哪家灌汤包最好吃 万圣节是哪天啊 android如何判断后台一个Service是否在运行? 安卓怎么自动启动service 手机出现很抱歉“AndroidSerVice”以停止运行怎么就解开? android中service的实现方法是 android service 怎么一直运行的 Android中如何启用Service,如何停用Service 如何写android service android service可以卸载吗 android 什么时候需要用service 移动平台应用开发这门课程第十章Android中Service(服务)的知识点有哪些? android中的service到底起什么作用 博客 AndroidService是什么? Android中Service服务有哪些? android service有什么用 Android中的Service到底起什么作用? 西安旅游详细指南。带有历史背景的。详细介绍的。急需 西安旅游注意事项 西安旅游大全的内容简介 微博怎么可以分享好友 一个小米账号账号可以解锁多个手机吗? 电子秤充不进电怎么回事?插电能用,不充电就用不了 刚买150公斤的电子秤充不进去电是怎么了? 体重秤只是可以充电 不可以放电池很长时间没用了今天充电显示LO怎么办? MACA||ROOs电烤箱用法 一个小米账号能登陆几个型号小米手机 空腹吃药的坏处? 早上空腹吃药,时间长了会对身体造成什么影响呢? 空腹吃药的危害 空腹吃药有什么坏处? 空腹吃药对身体有什么危害? 长期空腹吃药会怎样 早上空腹服药有坏处吗? 空腹吃药有何害处? 空腹吃药的副作用怎样? 经常空腹吃药会怎么样 总是空腹吃药,想知道有没有坏处 空腹吃药会有怎么样的后果? 空腹吃药会怎样? 一直空腹吃药会怎么样?