Application类

原创 2016年08月30日 10:59:14

源码中对其的描述:
* Base class for those who need to maintain global application state. You can
* provide your own implementation by specifying its name in your
* AndroidManifest.xml’s <application> tag, which will cause that class
* to be instantiated for you when the process for your application/package is
* created.

applicaton对象一直存在于整个程序的运行周期,是运行周期最长的一个对象。该对象继承Application类,在manifeset.xml中配置。因为application对象长期的存在,可以使用其承载参数进行全局的传递。Context中的getApplicationContext或者Activity中的getApplication方法可以获取appliction对象。application中可以使用Map(String,Object)进行复杂类型的数据传递。Intent、Buddle中的简单类型或者使用android中IPC数据传递Serializable的数据传递优越很多。application中可以做页面跳转中做数据cache,可以使用软引用,数据量大可以cache到rom或者sdcard中。因为application对象的长期存在,注意其中变量对引用的持有,以免造成内存泄露。

备注:application 被杀死的情况分析:
为了决定在内存较低的时候杀掉哪个进程, Android会根据运行在这些进程内的组件及他们的状态把进程划分成一个”重要程度层次”. 其重要的程度按以下规则排序:
1:前端进程可以是一个持有运行在屏幕最前端并与用户交互的Activity的进程(onResume方法被调用时),也可以是持有一个正在运行的IntentReceiver(也就是说他正在执行自己的onReceiveIntent方法)的进程. 在系统中, 只会有少数这样的进程, 并且除非内存已经低到不够这些进程运行, 否则系统不会主动杀掉这些进程. 这时, 设备通常已经达到了需要内存整理的状态, 所以杀掉这些进程是为了不让用户界面停止响应.
2:可视进程是持有一个被用户可见, 但没有显示在最前端 (onPause方法被调用时) 的Activity的进程. 举例来说, 这种进程通常出现在一个前端Activity以一个对话框出现并保持前一个Activity可见时. 这种进程被系统认为是极其重要的, 并且通常不会被杀掉, 除非为了保持所有前端进程正常运行不得不杀掉这些可见进程.
3:服务进程是持有一个Service的进程, 该Service是由startService()方法启动的, 尽管这些进程用户不能直接看到, 但是通常他们做的工作用户是十分关注的(例如, 在后台播放mp3或是在后台下载 上传文件), 所以, 除非为了保持所有的前端进程和可视进程正常运行外, 系统是不会杀掉服务进程的.
4:后台进程是持有一个不再被用户可见的Activity(onStop()方法被调用时)的进程. 这些进程不会直接影响用户体验. 加入这些进程已经完整的,正确的完成了自己的生命周期(访问Activity查看更多细节), 系统会在为前三种进程释放内存时随时杀掉这些后台进程. 通常会有很多的后台进程在运行, 所以这些进程被存放在一个LRU列表中, 以保证在低内存的时候, 最近一个被用户看到的进程会被最后杀掉.
5:空进程是没有持有任何活动应用组件的进程. 保留这种进程的唯一理由是为了提供一种缓存机制, 缩短他的应用下次运行时的启动时间. 就其本身而言, 系统杀掉这些进程的目的是为了在这些空进程和底层的核心缓存之间平衡整个系统的资源
当需要给一个进程分类的时候, 系统会在该进程中处于活动状态的所有组件里掉选一个重要等级最高作为分类依据. 查看Activity, Service,和IntentReceiver的文档, 了解每个组件在进程整个生命周期中的贡献. 每一个classes的文档详细描述他们在各自应用的生命周期中所起得作用.
mirrors.neusoft.edu.cn 80

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android中Application类用法

  • 2015年01月10日 10:33
  • 43KB
  • 下载

java application实现的在线聊天类

  • 2013年08月06日 12:03
  • 2KB
  • 下载

android开发之重写Application类

在android应用开发中,重写Application也算是比较常见的,以前开发的一些程序太过于简单,都不要重写这个类,但是在真正的商业开发中,重写Application类几乎是必做的。 为什么要重...
  • tx422
  • tx422
  • 2017年07月28日 20:44
  • 100

Android应用之——不要将数据存储在Application类中

前言:最近在开发中发现了一个比较严重的问题,当我们将应用按home键放入后台运行,一段时间后,当我们再次打开应用的时候,十有八九会出现一个NullPointException的空指针异常,根据logc...

在Android中不要将数据存储在Application类中,

最近在开发中发现了一个比较严重的问题,当我们将应用按home键放入后台运行,一段时间后,当我们再次打开应用的时候,十有八九会出现一个NullPointException的空指针异常,根据logcat的...

Android Application类的使用

Application 源码中描述的大概意思是:Application类是保存全局变量的基类,我们可以自定义一个类继承Application,然后在AndroidManifest.xml的< appl...

Android 学习笔记之七 Application类

Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,...

Android 打造自己的Application类

Android 的Application类可以说是一整个应用程序的“本身”涵盖了一个程序的生命周期,在程序创建到销毁只会创建一个Application对象。所以,有时候,我们会利用该类对Activit...

【安卓笔记】Application类作用浅析

android.app.Application类和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系...

Application类 的使用 ,设置全局变量

Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。 Andr...
  • kite30
  • kite30
  • 2015年07月06日 11:06
  • 428
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Application类
举报原因:
原因补充:

(最多只允许输入30个字)