Android系统编程入门系列之应用初始化Application

上一篇文章中咱们了解到Android系统启动应用的时候,会首先加载AndroidManifest.xml清单文件中的一系列信息,在清单文件中若是不指定<application></application>标签中的name属性值,会默认使用android.app.Application做为应用程序加载类,其生命周期与应用程序生命周期是一致的。那么到底应用程序有怎样的生命周期,在不一样的生命周期有哪些调用方法可使用?这章将详细介绍。html

生命周期

应用实例化

首先要知道,一个应用程序,有且仅有一个android.app.Application类与之对应,若是想在清单文件中使用自定义的Application,也必须是继承自android.app.Application的子类。Application的实例在Android系统启动应用时优先于应用中其余任何类而建立。android

应用加载运行环境

因为Applicaitonandroid.content.ContentWrapper的子类,因此在Application被实例化建立后,Android系统会优先调用该类的attachBaseContext(Context base)方法,从而将上下文环境base参数与该应用程序绑定。app

这里的 android.content.Context是Android系统对应用程序建立的运行环境,经过该类能够访问应用程序的资源文件、发送意图、接收广播等应用程序级操做。框架

Android系统中定义ContentWrapper类做为父类,被须要绑定上下文环境的组件继承。理论上,任何继承自ContentWrapper的子类,均可以重载其attachBaseContent(Context base)方法,同时在该方法内保证优先调用其父类方法super.attachBaseContext(base)以确保该组件被正常加载。然而并不推荐重载该方法,若是只是想获取上下文环境使用,在组件类内部,只要是在调用attachBaseContent(Contxt base)以后,均可以调用getBaseContext()得到该组件的上下文环境。google

应用建立

Application类与上下文环境绑定后,说明该应用程序已经加载运行环境,Android系统会继续调用onCreate()方法,代表该应用程序已建立。因此自定义的Application能够重载该方法,以完成在应用程序建立初期就要执行的操做。通常应用中使用的第三方框架都会在此处初始化,以保证应用建立之时就初始化框架结构。在重载该方法时,必定要优先调用其父类方法super.onCreate()code

其余应用内操做

以后Android系统再根据清单文件中的组件信息分别加载建立...... 此段暂且不提。xml

应用硬件改变

在应用程序运行过程当中,当Android系统所搭载的硬件设备发生变化时,Android系统会调用该类的onConfigurationChanged(Configuration newConfig)方法。若是重载该方法,能够响应android.content.res.Configuration类中所涉及到的硬件设备变化,例如常见的横竖屏切换、应用夜间主题与正常主题切换等,均可以在这里处理。另外,在重载该方法时,必定要优先调用其父类方法super.onConfigurationChanged(newConfig)htm

应用低内存警告

Android系统运行内存空间使用殆尽,可能致使应用程序没法正常运行。而此时当前应用程序若是还在前台运行,Android系统会调用该类的onLowMemory()方法,以后会杀死应用程序中的后台服务。若是重载该方法,能够释放一些不须要的资源,以防止内存空间进一步缩减,将可能保留前台界面。一样,在重载该方法时,必定要优先调用其父类方法super.onLowMemory()blog

应用内存杀死

而当Android系统运行内存空间使用殆尽时,应用程序也可能刚好在后台运行,此时Android系统会调用该类的onTrimMemory(int level)方法,以代表应用程序即将被Android系统杀死。其中的level参数能够代表当前应用程序所处等级,level等级低的将优先被Android系统彻底杀死。若是重载该方法,则不是释放资源就能解决的了,能够执行一些数据持久化保存操做,防止应用程序被杀死后再次启动后出现数据不一致的状况。一样,在重载该方法时,必定要优先调用其父类方法super.onTrimMemory(level)继承

值得注意的是,应用程序被用户主动杀死时,在该类中是没有方法响应的。

经常使用案例

  • 保存应用程序全局变量使用。不推荐该方式,由于当应用程序中含有多个进程时,每一个进程在建立时都会开辟新的内存空间,同时在新内存中建立新的Application实例与之对应,不一样进程中的全局变量也就不一致了。

  • 初始化第三方框架,具体使用方式可根据第三方框架教程相应调用。

相关文章
相关标签/搜索