Application和Context

322 阅读2分钟

Application系列

  • 谈谈你对application的理解: 生命周期很长,和进程一样,Application就是一个Context、程序的全局上下文,每一个程序在启动的时候都会打开创建一个application,它的父类是ContextWrapper、Context,并创建一个ActivityThread供启动Activity等的启动来服务。

  • Application的作用是什么? Application可以提供一些业务类和一些sdk的初始化工作,为了保证业务模块使用的时候能保证正常调用,但是不要再这里做大量的耗时操作,会影响App的启动速度,也可以储存临时变量,但是会有空指针的安全隐患,当应用内存极低的时候回清理掉application当应用再次前台使用时application会重新创建一个,以保证app开起来不像被kill掉一样重新加载上一个保留的activity,但是如果此时这个activity需要使用application里面的数据,就会为空,需要主动去判断数据不为空,避免crash,但是建议不要在application里存数据以及变量,当然单例也会同样会被清理掉,最好做到磁盘储存,用时存取。

  • Application的生命周期?

oncreate() -> 应用创建的时候会调用oncrete(),一般在这里做初始化工作。
attachBaseContext()-> 绑定上下文context 在oncrate()之前执行 具体源码makeapplciation->newapplication->onattch->attachBaseContext ->oncreate()

Context系列

  • 一个应用有多少Context
在应用启动时会初始化Application并创建全局的mBase上下文
每一个Activity和Service的启动ContextImpl都会创建一个Context 
所以一个应用的上下文数量=application上下文+N个Activity的上下文+N个Service的上下文
  • Activity的this和getBaseContext的区别是什么?
Activity的this指的是当前页面的上下文 生命周期同Activity一致即Activity销毁它也销毁,getBaseContext指的是特有构造函数获取到的上下文-开发者不建议使用
是Conwrapper里面的mBase,通过打印是ContextImpl
  • getApplication和getApplicationContext有什么区别?
指的同一个Applicaitn 只是返回类型不一样 调用域不一样  一个是在Avtivity中调用  一个是凡是带有context的都可以调用 全局上下文
  • 说一下在application中oncreate和attchApplicationContext的调用顺序。
makeApplication->newapplication_onttch->attchbasecontext--oncreate