Processes and Application Lifecycle

Processes and Application Lifecycle

在大多数情况下,Android应用程序运行在单独的Linux进程中,该进程一直运行直到该进程不需要再继续运行或者系统内存不足杀死该进程。

Android应用进程的生命周期不是由应用本身管理,而是由系统进行管理,系统根据该应用程序的各个组件来知道该应用程序是否在运行以那些应用程序对用户重要系统的内存还剩多少。应用程序的生命周期受到应用组件的影响(Activity,Service,BroadcastReceiver),不正确的组件使用方式,可能导致正在执行重要任务的应用程序,被系统杀死。一个典型的应用程序生命周期的bug是在BroadcastRecerve的onReceive()方法中启动一个后台线程,然后,在onReceiver()方法返回时,系统认为该BroadcastReceiver不在active,系统就会在内存低的情况下,杀死应用,因此,派生的线程也会被杀死。解决该问题的方法是在BroadcastReceiver的onReceiver()方法启动一个JobService,以至于系统知道该应用程序在执行任务。

为了决定在系统内存底下的时候,android中的那个进程会被杀死,系统根据运行在应用中的组件以及他们的运行状态对应用进程进行重要程度分配。四种不同重要程度的进程分配如下:

1、前台进程(foreground process): 前台进程是正在和用户交互的进程。应用进程满足以下任意一个条件,就被归为前台进程。

1、有在前台显示的activity,该activity获得焦点已经调用过onResume()方法。

2、BroadcastReceiver的onReceiver()方法正在执行。

3、Service的生命周期函数(onCreate(),onStartCommand(),onDestory())

正在执行。

在系统中,这样的前台进程只有很少的部分,只有在内存很少的时候,万不得已才会杀死这样的进程,该种进程在四种进程中最后被杀死以免影响系统用户界面的响应。

2、可见进程(visible process):可见进程正在做用户知道的事情,杀死该进程将会对用户的体验产生很大的负面影响。在以下条件下的进程被认为可见进程。

1、 activity在用户界面上对用户可见但是没有获得用户操作的焦点,(onPause()方法被调用),比如:activity的上面有一个对话框,该activity所在的进程就是可见进程。

2、 前台service就是一种可见进程。它承载的是系统正在使用的一项服务,该服务是用户意识到的比如实时壁纸,输入方法服务等。

这些可见进程在系统中运行的限制没有前台进程多,当系统内存不足时,会杀死该进程以保持前台进程的运行。

3、服务进程(service 进程):服务进程是通过startService()方法启动的服务,该服务进程对用户来说,不可见但是他在后台默默地执行一些重要的工作,比如:网络数据的上传和下载。所以,在系统内存低到不能保存前台进程和可见进程的时候,会把该类进程杀死。长时间运行的service(30min或以上)的进程的优先级会被降低,在缓存进程中,以防止service进程存在内存泄露或者其他方面的问题,而长期消耗内存。

4、缓存进程(cached process):该类进程不是当前需要的,所以,系统在需要内存的时候杀死这些进程。这些进程是唯一一种包含在内存管理中的,一个运行良好的系统拥有多个cached processes ,他杀死进程的时候都是优先杀死oldest进程,除非在非常重要的情况下,系统才会杀死所有cached process以至于要杀死服务进程。 这些cached process 通常包含多个activity实例,这些实例都调用过生命周期方法(onStop()),系统会杀死那些不影响用户体验的activity,当用户重新返回该activity时,会重新创建该activity的实例,你可以恢复该activity的状态该,当该activity实例重新创建的时候。

5、进程优先级可以根据他依赖的其他进程的优先级而增加,例如:A进程bind一个service通过Context.BIND_AUTO_CREATE flag或者用ContextProvider在B进程中,B进程的优先级至少和进程A一样重要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值