简介:

  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的触发更频繁,每次计算进程优先级时,只要满足条件,都会触发。

Android application使用总结的更多相关文章

  1. My First Android Application Project 第一个安卓应用

    一.前言: 安卓(Android):是一种基于Linux的自由及开放源代码的操作系统,主要用在移动设备上,如手机.平板电脑.其他的设备也有使用安卓操作系统,比如:电视机,游戏机.数码相机等等. 二.具 ...

  2. Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradle:2.XX的最正确的解决方法

    发现android studio是真的可爱啊,上一秒还没问题可以build运行,下一秒就出错...好,你任性,你牛逼.. 说下今天又遇到的两个问题:Failed to apply plugin [id ...

  3. eclipse:File->New没有Android Application Project的解决办法

    我的Eclipse版本是:Kepler Service Release 1,截图: 解决步骤: 1.单击Window,选择Customize Perspective,如图: 2.勾选Android A ...

  4. Professional Android Application Development

    Professional Android Application Development 访问地址 http://docs.google.com/fileview?id=0ByVHV5sjM4fNNj ...

  5. Plugin with id 'com.android.application' not found.

    构建报错: Error:(1, 0) Plugin with id 'com.android.application' not found. <a href="openFile&quo ...

  6. android application plugins framework

    android插件式开发 android application plugins framework http://code.google.com/p/android-application-plug ...

  7. Compile a native C Android application

    原文: Compile a native C Android application翻译: Zhiwei.Li 通过上网搜索,你可以发现很多种编译Android native应用的方法.我想说的是,不 ...

  8. android application类的用法

    android application类的用法 Application是android系统Framework提供的一个组件,它是单例模式(singleton),即每个应用只有一个实例,用来存储系统的一 ...

  9. Android Application Fundamentals——Android应用程序基础知识

    Application Fundamentals--应用程序基础知识 Key classes--关键类 Activity Service BroadcastReceiver ContentProvid ...

  10. AS导入项目报错:Plugin with id 'com.android.application' not found.

    从github或第三方Demo中获取的项目导入到AndroidStudio中报错Plugin with id 'com.android.application' not found.:今天导入一个讯飞 ...

随机推荐

  1. 这月薪过万的Java高级学习资料,难得一遇的干货,不下载真可惜了!

    大家有没有想我呢 不管你们想不想我 我挺想你们的 通过昨天我不断的 死气白咧各种说好话 最终 要到了Java学科的Java集合学习资料 里面包含视频+资料+源码 堂兄也有一个愿望 希望你们月薪过万后 ...

  2. [Swift]LeetCode365. 水壶问题 | Water and Jug Problem

    You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...

  3. [Swift]LeetCode637. 二叉树的层平均值 | Average of Levels in Binary Tree

    Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...

  4. [Swift]LeetCode883. 三维形体投影面积 | Projection Area of 3D Shapes

    On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...

  5. [Swift]LeetCode991. 坏了的计算器 | Broken Calculator

    On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...

  6. [Swift]LeetCode1022. 从根到叶的二进制数之和 | Sum of Root To Leaf Binary Numbers

    Given a binary tree, each node has value 0 or 1.  Each root-to-leaf path represents a binary number ...

  7. 从搭建V2Ray服务器到编译V2Milk的完整过程

    概述 因为公司出口ip一直在变,所以waf白名单不好加入,所以搭一个了代理服务器 .搭建了V2Ray服务器 .为了好管理,找了一个@Zzm317开源的V2Milk. V2Milk为V2Ray跨平台定制 ...

  8. Python 创建递归文件夹

    # 创建递归文件夹 def createfiles(filepathname): try: os.makedirs(filepathname) except Exception as err: pri ...

  9. Java核心技术及面试指南 多线程并发部分的面试题总结以及答案

    7.2.10.1有T1.T2.T3三个线程,如何保证T2在T1执行完后执行,T3在T2执行完后执行? 用join语句,在t3开始前join t2,在t2开始前join t1. 不过,这会破坏多线程的并 ...

  10. Python3练习

    Hello Python3 print("Hello Python!") #print("Hello, Python!"); '''a=1 b=2 c=a+b ...