安卓内存管理及应用保活

安卓内存管理策略是  进程退出并不会立刻杀死,而是在系统内存赤金的时候再来按照优先级杀掉进程。他给进程分别定义了6个阈值,作为杀死进程优先级。这6个分别是

ForegroundProgress/VisibleProgress/SecondaryService/HiddenProgress/ContentProvider/EmptyProgress

1、前台进程(比如正在显示的activity所在的进程)

2、可见进程(比如输入法进程)

3、次要服务进程

4、隐藏进程

5、内容提供者进程

6、空进程

具体api可以参考com.android.server.am.ActivityManager.RunningProgressInfo

扫描二维码关注公众号,回复: 4492044 查看本文章

通过这个可以采取应对措施  让应用被杀死的可能性降低

1、将Service设置为前台进程

设置成了前台服务,手机状态栏会有个无法消除的notification,这样用户体验很差

2、在service的onstart方法里返回 STATR_STICK

START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。 

START_STICKY:系统就会重新创建这个服务并且调用onStartCommand()方法,但是它不会重新传递最后的Intent对象,这适用于不执行命令的媒体播放器(或类似的服务),它只是无限期的运行着并等待工作的到来。

START_NOT_STICKY:直到接受到新的Intent对象,才会被重新创建。这是最安全的,用来避免在不需要的时候运行你的服务。

START_REDELIVER_INTENT:系统就会重新创建了这个服务,并且用最后的Intent对象调。等待中的Intent对象会依次被发送。这适用于如下载文件。

3、添加Manifest文件属性值为android:persistent=“true”

签名编译不过,然并软

4、覆写Service的onDestroy方法

这个 针对force close 是无效的

5、添加广播监听android.intent.action.USER_PRESENT事件以及其他一些可以允许的事件

这个广播是用户解锁发出的,可以静态注册的一个广播接收者

6、服务互相绑定

7、设置闹钟,定时唤醒

AlarmManager.RTC,硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟

AlarmManager.RTC_WAKEUP,硬件闹钟,当闹钟发躰时唤醒手机休眠;

AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟

AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,当闹钟发躰时唤醒手机休眠;

8、账户同步,定时唤醒

9、native层保活

高版本还是行不通

10.JobScheduler  

8.0还是会被杀死

猜你喜欢

转载自blog.csdn.net/xiexiaotian11/article/details/81942407