欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android application使用总结

程序员文章站 2022-05-03 13:08:14
简介: Application和Activity、Service一样,都是Android框架的一个系统组件,每一个应用都有一个Application,Application的生命周期也就是整个app的生命周期。 特点: 实例的创建方式:单例模式 每一个app运行是会首先会创建Application类 ......

简介:

  application和activity、service一样,都是android框架的一个系统组件,每一个应用都有一个application,application的生命周期也就是整个app的生命周期。

特点:

  • 实例的创建方式:单例模式

  每一个app运行是会首先会创建application类并实例化application对象,有且只有一个(单例模式),也可以继承application自定义application类,需在manifeast中注册。

  • 实例类型:全局类型

  不同组件获得的application实例是同一个实例。

  • 生命周期

  application的生命周期等于这个应用的生命周期。

 

application的使用:

  • oncreate()

  application创建时调用,用于初始化一些资源、第三方框架的初始化等,这个方法里面切记不要执行耗时的操作,不然影响第一个activity、service的启动速度

  • onlowmemory()

  onlowmemory()是android系统内存不足时,当所有的后台程序都被kill了之后还是没有足够的内存来运行当前的应用,这个时候系统就会通知你轮到你清理一下释放一些资源保障app能够运行。

  • ontrimmemory()

  ontrimmemory(int level)的传参是一个int型,这个数值越大代表着内存不足的严重性越高。有一个很有意思的比方:

  从前有个伟大的妈妈叫android系统,她有一群子女叫app,她含辛茹苦地养着这群熊孩子。当系统老妈发现她的工资(内存)不够下个月的开销的时候,就会回调这个方法,告诉她的app子女,我现在工资不够了,你们赶紧少吃少用点,不然我就要根据你们的重要  性高低来一个一个地“清理门户”了。
  这里有传入一个int类型的参数level,它告诉app们内存不足的严重性(越高越严重)。假如这时候系统内存不足,运行着前台和后台一共几个app,这些不同的app会收到系统老妈不同的“劝告信息”:

  1. trim_memory_running_moderate:数值为5,这个app是系统老妈的“掌上明珠”(前台app),老妈让app注意一下:不要大手大脚(释放不用的内存),我的工资(内存)不够养你了,不过就算再不够,只是把你其他不争气兄弟姐妹(杀掉后台app)清出家门,你注意一下吧。
  2. trim_memory_running_low:数值10,这个app是系统老妈的“掌上明珠”(前台app),老妈语重心长地对app说:孩子,我的工资(内存)实在不够了,你能不能拿点压岁钱出来帮补一下(释放不用的内存),不行的话就要把你的很多兄弟姐妹(杀掉后台app)送走了。
  3. trim_memory_running_critical:数值15,这个app是系统老妈的“掌上明珠”(前台app),老妈严重警告app:臭小子,你的兄弟姐妹(杀掉后台app)都快走光了,你还不给我多省点钱(要求释放内存),你还真的想把你的兄弟全赶走啊,当时候就剩你一个,说不定你都自身难保啦(执行onlowmemory()方法)。
  4. trim_memory_ui_hidden:数值20,老妈告诉这个app:你个熊孩子,闯了祸(用户把app从前台切换到后台),我要收回你的零用钱(ui资源)。
  5. trim_memory_background :数值40,这些app是老妈收养的(后台app),老妈在吃完晚饭后留下了他,对他说:孩子啊,现在家里经济不好(内存不足),你就少花点吧,这个月的零用钱不发了吧(要求释放资源),不然的话我们家可能养不下你和你后面的那帮兄弟姐妹了(杀掉后台app)。
  6. trim_memory_moderate :数值60,这些app是老妈收养的(后台app),老妈偷偷地跟app说:孩子啊,你们花费太多了,老妈的工资养不下你们了(内存不足),你们用少点吧(要求释放内存),不然等我把你后面那几个兄弟赶出去之后就轮到你了(已进入lru缓存列表的中间位置,如果后面的app进程资源都被回收的话,下一个就是轮到它了)。
  7. trim_memory_complete :数值80,这些app是老妈充话费送的(后台app),老妈狠狠地对他说:臭小子,没看到都快揭不开锅了(内存不足)吗?赶紧把你的私房钱拿出来(要求释放资源),不然你们就准备滚出这个家门吧(已处于lru缓存列表的后面位置,app随时都有被回收的风险)。

 

ontrimmemory()和onlowmemory()的区别:

  1. onlowmemory被回调时此时已经没有后台进程了,而ontrimmemory被回调时此刻还存在后台进程。
  2. onlowmemory是在最后一个后台进程被杀时调用,一般情况是low memory killer 杀进程后触发;而ontrimmemory的触发更频繁,每次计算进程优先级时,只要满足条件,都会触发。