文档章节

Android服务重启

z
 zhiliubai
发布于 2017/03/18 12:33
字数 1037
阅读 6
收藏 0

如何让自己的服务重启一直让本人头疼,尽自己所能还是无法克服,原因是使用小米手机做测试,却没留意小米的“自启动管理”,发现自己的应用没有添加到列表中,结束进程无法复活,允许后就变得生猛活虎。


原文转自:http://blog.csdn.net/guijiaoba/article/details/12911633

现在有这样的需求,防止自己的app被其他的应用程序(比如qq手机管家)杀死,该怎么实现呢。我们知道app都是运行在进程中的,android是怎样管理这些进程的呢。要想app不被杀死,只要做到进程不被结束就解决了问题。但是不幸的是,第三方app很容易利用系统的api(比如killBackProgress())轻易杀死其他进程。那该怎么办呢?


   目前有这样的解决方案。在本进程被其他应用程序杀死后,就立即重启,这样就可以间接防止进程被结束(其实已结束了,只重新开启)。至今为止,还未知道怎样完全防止第三方结束本进程,正在寻找中。。。。。。。。。。。。。


   现在问题又来了,自己的应用怎么知道什么时候被杀死了,杀死之后又怎么重启呢?答案是,无法知道,自己也无法重启。幸好android提供了service,android规范中指出进驻有service的进程的优先级别很高,除非是本应用自己调用stopService结束服务,否则即使第三方应用杀死该进程,而后进程也会自己重启(服务也重启)


   所以说,要想进程被杀死后能自动重启,那么只需要在该进程中开启某个服务就可以了。


补充:


1、通过 设定-》应用程序-》运行  结束某个进程或服务,这样进程或服务不会重启。


2、如果采用bindService()方法启动服务,那么在 设定-》应用程序-》运行是看不到此项服务信息的。这样的服务也可被”qq手机管家“永远杀死,不在重启。


 


结论:无法防止其他应用程序杀死自己进程或服务(系统自带的服务管理外),但是可以在杀死后重启。


 


另外,可以设置service属性:
 


每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,这个方法return 一个int值,return 的值有四种:
 
START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
 
START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
 
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
 
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。




另外我使用的是小米手机,小米自带一个一键清理的功能,大部分服务都是不能重启,可能是这个它的清理功能具有的权限是很高的,可以直接强制结束你的应用,但还发现还有个别应用能够重启,比如微信什么的。
google,百度很长时间都没有实现,后来发现小米手机有个“自启动管理”,发现里面有个微信的名字,然后我把我的应用添加到里面,发现一键清理后,我的应用可以重启服务了,结论:小米的一件清理虽然比较犀利,但是人家提供一个黑白名单的功能,然用户选择性的让应用自启动。

本文转载自:http://blog.csdn.net/zoroday/article/details/24272127

z
粉丝 0
博文 26
码字总数 0
作品 0
广州
私信 提问
Android-工作在后台-Service

Android提供Service组件用来处理耗时的操作,不需要用户界面。 Service组件的优先级比不活跃的Activity高,这样被系统杀死的概率就降低了。当然,实际上即便运行中的Service被杀,但是当系统...

Chanimalx
2013/03/12
6.1K
1
android service被系统回收的解决方法

android service被系统回收的解决方法 博客分类: Android开发 androidservicekill 自己的app的service总是容易被系统回收,搜罗了一下,基本上的解决思路有以下几种: 1.把service写成系统服...

zhouw
2014/03/29
2.9K
0
Android App中多进程问题:捕获异常信息并重启应用

App crash原因以及解决办法- https://blog.csdn.net/yangtuxiaojie/article/details/47123243 Android在程序崩溃或者捕获异常之后重新启动app- https://www.cnblogs.com/dingxiansen/p/8628......

desaco
2018/11/21
0
0
Android的单元测试究竟有用没用?

做了三年多的Android开发,关于单元测试偶尔写一下完全是练手,从来没有在公司运行的项目上使用过。中途有客串过java后台,那段时间倒是写过几个后台服务单元测试。 我的理解,单元测试主要目...

Reone小卒
2018/10/29
32
0
当我们按下电源键,Android 究竟做了些什么?

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由goo发表于云+社区专栏 相信我们对Android系统都不陌生,而Android系统博大精深,被各种各样的智能设备承载的同时,我们会否...

腾讯云加社区
2018/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
6
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
9
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
5
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
7
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
7
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部