在android面试中,咱们常会遇到Framework面试相关问题,而今天要分享的便是Android Application为什么是单例?

其主要调查的是程序员对 Application 的创立这块的源码是否了解。

问题正解:

从源码层面来说下application凭什么是单例,咱们查看下Application 目标的创立过程,找出它为什么是单例的原因。 所以咱们直接来看Application是怎么一步步创立的。

handleBindApplication
// ActivityThread.java
private void handleBindApplication(AppBindData data) {
  Application app;
  
  // 创立 Application 目标的代码
  app = data.info.makeApplication(data.restrictedBackupMode, null);
}
makeApplication
// LoadedApk.java
public Application makeApplication(boolean forceDefaultAppClass,
      Instrumentation instrumentation) {
  // 假如 mApplication 不等于空,则直接返回
  if (mApplication != null) {
    return mApplication;
   }  
​
  // 创立 Application目标经过反射
  app = mActivityThread.mInstrumentation.newApplication(
          cl, appClass, appContext);  
}

从上面代码可知,当 Application为空的时分,才会创立,从而保证了它是一个单例目标。这道题相对简单,便是调查大家是否了解application的创立流程。

Application是一个单例,即每一个app发动的时分都会创立一个Application的实例,它用来存储和处理整个大局变量的一些事情,它一起还是一个Context,Application也像Activity相同有自己的生命周期,可是它并没有那么复杂,由于Application只在打开app,确切的说是发动app的时分才会创立,所以说可以在application创立的时分对app大局进行一些装备,比方装备插件

今天分享到此结束,下期更精彩~

重视大众号:Android老皮
解锁 《Android十大板块文档》 ,让学习更靠近未来实战。已构成PDF版

内容如下

1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2023最新Android中高级面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习道路+项目实战(附源码)
5.Android Jetpack从入门到通晓,构建高质量UI界面
6.Flutter技术解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构根底
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 功能优化实战+360全方面功能调优
10.Android零根底入门到通晓,高手进阶之路

敲代码不易,重视一下吧。ღ( ・ᴗ・` )