【Android开发坑系列】如何让Service尽可能存活
流行的思路如下【2015-11-20更新】:
1.让Service杀不死。Service的onStartCommand返回START_STICKY,同时onDestroy里面调用startService启动自身。
2.让Service从后台变成前置。在Android 2.0以前有效,借助setForeground(true)。
3.让某个进程不被系统的low memory killer杀死(如数据缓存进程,或状态监控进程,或远程服务进程)。add android:persistent="true" into the <application> section in your AndroidManifest.xml 。切记,这个 不可滥用,系统中用这个的service,app一多,整个系统就完蛋了。 通过实验发现即使设置了这个属性,应用程序被force kill之后还是不能重新启动起来的,应该是只对low memory killer免疫。
4.提升Service优先级。在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,避免Service被系统回收。
5.定时唤醒,通过AlarmManager。(在Android 4.0之前有效,4.0之后被强杀的APP无法唤醒 参考 http://www.android100.org/html/201305/06/2430.html)。
6.当应用升级之后,即使用户不点开APP,也要重启服务。因为升级APP时会发送ACTION_PACKAGE_RESTARTED,AlarmManager作为系统服务,会接受这个事件,然后startService。
7.让Service开机启动。不过现在很多手机会禁止开机启动。
8.守护进程。
参考1:http://www.bubuko.com/infodetail-474019.html
参考2:http://blog.csdn.net/hellogv/article/details/46765387
【Android开发坑系列】如何让Service尽可能存活的更多相关文章
- 【Android开发坑系列】之事件分发机制
总结一下: 事件序列的定义:从手触摸屏幕(含)到离开屏幕(含)期间所发生的一系列交互事件.主要由ACTION_DOWN.ACTION_MOVE.ACTOIN_UP.ACTION_CANCEL等组成,其 ...
- 【Android开发坑系列】之Fragment
这个东西有顾名思义是碎片,和之前的Activity对应. 坑1:一般情况都会想当然的以为进程被杀掉之后,Fragment也会被回收 其实,Fragment有自己的生命周期,有自己的管理器(Fragme ...
- 【Android开发坑系列】之PopupWindow
PopupWindow在4.0之前的版本有个系统级别的BUG,必须借助一段自定义的fix代码来修复.其中mPopPm就是PopupWindow实例.java.lang.NullPointerExcep ...
- 【Android开发坑系列】之事件
总结一下: 1.Touch事件分发中只有两个主角:ViewGroup和View.ViewGroup包含onInterceptTouchEvent.dispatchTouchEvent.onTouchE ...
- 【Android开发坑系列】之经常被忽略的背景图片内存泄露
我们平时设置图片的时候,几乎都忘记回收老的(背景)图片,比如: TextView.setBackgroundDrawable() TextView.setBackgroundResource() Im ...
- 【Android开发坑系列】之try-catch
try { mViewPager.postDelayed(new Runnable() { @Override public void run() { getCurrentPage().render( ...
- 【Android开发坑系列】之窗口管理
关键知识要点如下(持续更新): WindowManagerService只负责管理Window,不负责图像的绘制: SurfaceFlinger负责图像的合成:
- Android 开发 框架系列 OkHttp拦截器
前言 此篇博客只讲解okhttp的拦截器功能的详细使用,如果你还不太了解okhttp可以参考我另外一篇博客 Android 开发 框架系列 OkHttp使用详解 添加Interceptor的简单例子 ...
- 推荐扔物线的HenCoder Android 开发进阶系列 后期接着更新
官网地址:http://hencoder.com/ 我来做一次辛勤的搬运工 HenCoder:给高级 Android 工程师的进阶手册 HenCoder Android 开发进阶: 自定义 View ...
随机推荐
- IOS 代码块传值
#import <UIKit/UIKit.h> typedef void (^MyBlock)(NSString*); @interface SecondViewController : ...
- SGU196_Matrix Multiplication
给一个无向图,如果第i个点连接第j条边,那么mat[i][j]=1,否则mat[i][j]=0. 求mat的转置乘以本身得到的矩阵每个位置的和是多少? 理解矩阵的意义就比较好做了. mat[i][j] ...
- js 根据年月获取当月有多少天_js获取农历日期_及Js其它常用有用函数
//根据年月获取当月有多少天 function getDaysInMonth(year, month) { debugger; //parseInt(number,type)这个函数后面如果不跟第2个 ...
- heartbeat安装与配置
Hearbeat和keepalived区别 Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP): He ...
- 斯坦福第十八课:应用实例:图片文字识别(Application Example: Photo OCR)
18.1 问题描述和流程图 18.2 滑动窗口 18.3 获取大量数据和人工数据 18.4 上限分析:哪部分管道的接下去做 18.1 问题描述和流程图
- Python动态生成变量
Python 也可以像javascript那样动态生成变量.我们看javascript的动态生成变量. var obj = {}; for (var i =0, len = 10; i < le ...
- Java小应用程序Applet,画布上新建按钮和文本
<pre name="code" class="java">package com.hx; import java.applet.*; import ...
- Android--Content Provider
1.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性. 2.内容提 ...
- mybatis学习之路
MyBatis 是支持普通SQL查询.存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装. MyBatis可以使用简单的XML或注解 ...
- java 继承多态的一些理解不和不理解
1.向上转型的一个误区 一直以为Child 继承Parent以后, Parent p = new Child(); p可以调用Child类中拓展Parent的方法,原来必须在强制转换成Child类才 ...