现在有这样的需求,防止自己的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,百度很长时间都没有实现,后来发现小米手机有个“自启动管理”,发现里面有个微信的名字,然后我把我的应用添加到里面,发现一键清理后,我的应用可以重启服务了,结论:小米的一件清理虽然比较犀利,但是人家提供一个黑白名单的功能,然用户选择性的让应用自启动。

Android服务重启的更多相关文章

  1. Android 服务端开发之开发环境配置

    Android 服务端开发之开发环境配置 这里是在Eclipse的基础上安装PhpEclipse插件方法,PHPEclipse是Eclipse的 一个用于开发PHP的插件.当然也可以采用Java开发a ...

  2. Android服务之PackageManagerService启动源码分析

    了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中.SystemServer进程在启 ...

  3. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建   目录(?)[+] 什么是服务 服务有 ...

  4. 【转】Android 服务器之SFTP服务器上传下载功能

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  5. erlang-百度云推送Android服务端功能实现-erlang

    百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...

  6. Android服务Service具体解释(作用,生命周期,AIDL)系列文章-为什么须要服务呢?

    Android服务Service具体解释(作用,生命周期,AIDL) 近期沉迷于上班,没有时间写博客了.解衣入睡,未眠.随起床写一篇博客压压惊! ##我们android系统为什么须要服务Service ...

  7. Android 服务入门

    前言:硬着头皮把数据库SQLite看完了,接下来就是android服务了,因为自己本身就是菜鸟,所以呢,也只是做做笔记,技术上的东西就别指望我了. 1.什么是服务呢?举个例子,百度地图,美团外卖,OF ...

  8. android 服务与多线程

    android服务是执行在UI主线程的.一下是代码demo: package com.example.testservice; import android.os.Bundle; import and ...

  9. 【转】Android 服务器之SFTP服务器上传下载功能 -- 不错

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

随机推荐

  1. Five reasons phosphorene may be a new wonder material

    A material that you may never have heard of could be paving the way for a new electronic revolution. ...

  2. Unity Shader-简单均值模糊

    http://blog.csdn.net/puppet_master/article/details/52547442 与Amplify中的Simple Blur例子实现一样

  3. Git学习笔记——从一台电脑上传文件到Github上

    目标:从一台电脑上传文件到Github上 前提: 1.这里假定已在Github上创建了仓库,建立了仓库 2.已在这台电脑上安装了Git客户端 实验环境: 1.Windows 10 64位,已安装了Gi ...

  4. Rotate image and fit show use canvas

    Description In the field of image processing, We always to show image after modified the image raw d ...

  5. DSO(dsoframer)的接口文档

    (开发环境)使用前先注册一下DSOFramer.ocx    操作:将DSOFramer.ocx复制到C:\windows\system32目录下,         开始->运行->reg ...

  6. 如何安装JDeveloper

    1>下载jdk和JDeveloper jdk版本:jdk-7u65-windows-x64.EXE JDeveloper版本:jdev_suite_12.3_win64_V44419-01.is ...

  7. ROS 消息发布器和订阅器Publisher, Subscriber

    博客参考:https://www.2cto.com/kf/201705/639776.html 1.编写发布器节点节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点(“t ...

  8. Mybatis的map用法

    当Mybatis传过来的值是map类型的时候,有两种处理方法 1.将数值装入类封装起来 public interface IStudentDao { // 根据姓名和年龄查询 List<Stud ...

  9. iOS7修改UISearchBar的Cancel按钮的颜色和文字

    两行代码搞定: [[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor ...

  10. 何时使用[self release]

    这样的语句   [self release]; 乍看上去让人很困惑. 从release方法本身的作用上来说,就是给self的引用技术减一,就像release对其他对象所做的一样. 一般来说,唯一用到, ...