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

service怎么才能在系统休眠后不被杀掉

发布网友 发布时间:2022-05-29 21:59

我来回答

3个回答

热心网友 时间:2023-11-30 12:27

Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中 通过<service>来声明。可以通过contect.startservice和contect.bindserverice来启动。和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现(或者用系统提供的IntentService,它继承了Service,它处理数据是用自身新开的线程)。【当然你也可以在新的线程中startService,这样Service就不是在MainThread了】

本地服务 Local Service 用于应用程序内部
它可以启动并运行,直至有人停止了它或它自己停止。在这种方式下,它以调用Context.startService()启动,而以调用Context.stopService()结束。它可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。不论调用了多少次startService()方法,你只需要调用一次stopService()来停止服务。
【用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好】

远程服务 Remote Service 用于android系统内部的应用程序之间
它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
【可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可】

1,Service的生命周期

2,Service运行方式
以startService()启动服务,系统将通过传入的Intent在底层搜索相关符合Intent里面信息的service。如果服务没有启动则先运行onCreate,然后运行onStartCommand (可在里面处理启动时传过来的Intent和其他参数),直到明显调用stopService或者stopSelf才将停止Service。无论运行startService多少次,只要调用一次stopService或者stopSelf,Service都会停止。使用stopSelf(int)方法可以保证在处理好intent后再停止。onStartCommand ,在2.0后被引入用于service的启动函数,2.0之前为public void onStart(Intent intent, int startId) 。

以bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用onDestroy()方法。

3,拥有service的进程具有较高的优先级
官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。
1. 如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被killed。
2. 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.
3. 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。
4. 如果service可以使用startForeground(int, Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。
5. 如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性。

保证service不被杀掉

热心网友 时间:2023-11-30 12:28

运行powercfg -h on即可开启休眠功能。

热心网友 时间:2023-11-30 12:28

敲回车
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2023年辽宁高考399分能报哪些公办大学 额头有杂音是什么意思啊 ...反应也不是一般的迟钝,胆子还越来越小,叫我的声音稍大就会被吓... 2022天津理工大学各省录取分数线 ...一个是个胖子 一个是个小矮子 一个是个黄头发的男人 一个是个穿... 我是河南理科女今年考了545 报考天津理工大学一本希望大不?二本专业... ...一个是个胖子 一个是个小矮子 一个是个黄头发的男人 还有一个是个... 有个手机游戏 图标就是一个黄头发的人背着弓箭 游戏内容是两个人_百度... 我是男生从小就怕那些动物,比如青蛙,觉得一想青蛙的皮肤就全身鸡皮疙瘩... ...不是昆虫总动员,其中片段是,一群昆虫被青蛙吃进肚子里,它们在里面... Servlet的运行原理与生命周期是什么? “马格泵”铭牌参数,请帮我翻译一下 renk maag是什么公司 瑞士马格(maag)在国内的办事处的联系方式 买到个奇怪的电源,直流的服务器电源,请问如何改成普通台式电源?_百度... 服务器机柜风扇是怎样供电的 谁能给出交直流服务器方案配置要求:交流直流供电 混合供的电服务器... 什么是肝血管瘤,做什么检查能查出来 我婆婆B超检查时发现肝上有一个1.5cm的血管瘤(怀疑),想做进一步检查,大 ... 肝血管瘤怎么能确诊 肝血管瘤需要怎么诊断才能确定,要做什么检查 肝血管瘤做什么检查确诊 肝血管瘤都做什么检查 我是做什么检查才可以确定肝血管瘤的大小 肝血管瘤的检查方法哪些较好 体检后 有轻度脂肪肝 并且怀疑有肝血管瘤 去医院做什么检查能确诊是不... 被自己不小心删掉怎么找回? 肝血管瘤做什么检查诊断 如何确认肝血管瘤检查准确 支付宝支付功能关闭,花呗和借呗无法提前还款,到还款日会自动还吗?_百... 请问android非法退出后,activity生命周期顺序是什么 您好,我想问我弟检查身体尿检有两个加号,是怎么回事! 老虎的中文是什么 孕20周,尿蛋白两个加号,怎么回事? 白带检查两个加号,其他均正常,是怎么回事 男朋友当兵体检 尿检有两个加号 怎么回事 严重吗? 乙肝五项中有两个加号是怎么回事? 验尿葡萄糖两个加号是怎么回事?空腹验的!跟吃得有关系吗? 体检时发现尿液检查红细胞有两个加号?是怎么回事? ...的尿常规的潜血一项里有两个加号,到底是怎么回事? 肾的肌肝,蛋白,都两个加号。说明了什么! 汉堡里的荷包蛋怎么自己煎啊? 麦当劳的荷包蛋怎么煎的 iPhone的小红书和iPad的小红书能同步吗 小红书在另一台设备上登录未读显示会重新显示么 无穷个无穷小的和是无穷小吗 哪里可以学做茶叶蛋拜托了各位 谢谢 无穷个无穷小量的和 请分情况说明,我记得跟什么高阶,低阶有关,详细并... 无穷个无穷小量之和是无穷大量还是无穷 为什么QQ空间克隆器克隆别人的时候要一直输验证码??