Android面试题:如何提升后台进程存活率

  在Android系统中,应用进程中止运行每一位开发者均可能会面临的问题,直接影响着用户的体验。那么怎样能提升后台应用的存活率?尚学堂李老师为你们总结了几点缘由和应对方法:
  1.用户主动退出; 2.Crash异常退出; 3.系统经过中止掉进程回收内存。
  其中,用户主动退出是合理行为;进程发生Crash后须要从新启动应用(有些状况会自动重启)。系统经过中止掉应用进程回收内存,理论上也是合理的行为。这里咱们重点分析第三种状况。
  咱们知道,Android有一个淘汰机制,即Android系统会根据应用的运行状态设置一个进程的优先级,而后根据系统总体内存使用状态进行调整,当内存占用达到必定阈值时,就须要把一些优先级低的进程中止掉,以保证其余进程可以有足够的内存使用。网络


  可是中止掉应用进程会对体验有较大的影响。如再次打开应用耗时会更长(冷启动),若是能从最大程序上提升应用进程的存活率,能够提升热启动的几率,减小冷启动的几率,让用户更快进入应用。因此提升应用进程的存活率是很是有意义的。
  应用进程优先级
  在Android系统中,应用进程的优先级(oom_adj值)分为如下等级,不一样定义的进程系统采用了不一样的管理机制。oom_adj值从-17到16,oom_adj越大,进程优先级越低。
  常见的五个等级为: 前台进程(FOREGROUND_APP_ADJ=0); 可见进程(PERCEPTIBLE_APP_ADJ=2); 服务进程(SERVICE_ADJ=5); 后台进程(CACHED_APP_ADJ=8); 空进程(HIDDEN_APP_MIN_ADJ=15)。
  当内存不足时,进程优先级低的(oom_adj越大的)、占内存大的App进程将会被优先中止掉,系统进程的规则以下:
  1.进程优先级设置为PERSISTENT_PROC_ADJ(-12)被中止几率要低。 2.进程优先级HEAVY_WEIGHT_APP_ADJ(4),这种是Activity仅次于主进程,系统认为是高权重进程。 3.前台进程FORGROUND_APP_ADJ(0),前台进程,是指正在前台运行的应用,被中止几率不大。 4.进程中没有任何Activity存在会优先被中止。 5.空进程最容易被中止。
  提升进程优先级进程保活
  上述分析能够,能够提升进程优先级使应用在后台的存活时间更长,通常使用如下几种方法实现。
  1)网络链接
  经过长链接心跳和进程保持通讯,使进程保持活动状态,但若是系统内存很是紧张,也有可能被中止。
  2)利用系统现有机制
  通常能够利用注册系统消息(AlarmReceiver,RootReceiver等),经过系统消息响应挂起进程。
  3)利用SyncAdapter
  利用Android系统提供的帐号同步机制SyncAdapter,实现进程优先级提升。SyncAdapter是一个系统服务,经过系统的定时器更新应用程序数据ContentProvider,由于Sync服务工做在独立进程,而且由操做系统调度,进程属于核心进程级别,系统不会将其中止,而使用了SyncAdapter的进程优先级自己也会提升,从而下降应用进程被中止的几率。
  4)此外,下降应用内存开销是减少进程被系统回收几率的一个很是有效的方法。
 ide

相关文章
相关标签/搜索