Application中在onCreate()方法里去初始化各种全局的变量数据是一种比较推荐的做法,但是如果你想把初始化的时间点提前到极致,也可以去重写attachBaseContext()方法,在attachBaseContext方法里初始化。

如下写法:有些人可能会这样写,像单例模式一样,这里提供了一个getInstance()方法,用于获取BaseApplication的实例,有了这个实例之后,调用BaseApplication中的各种工具方法。
 但是这种写法是完全错误的!因为Application是属于系统组件,系统组件的实例是要由系统来去创建的,如果这里我们自己去new一个BaseApplication的实例,它就只是一个普通的Java对象而已,而不具备任何Context的能力。
 (例如使用 LitePal 时发生了空指针错误其实都是由于这个原因,因为你提供给LitePal的只是一个普通的Java对象,它无法通过这个对象来进行Context操作)

/*** 错误!!!!!!!* */
public static BaseApplication getInstance() {if (baseApplication == null) {baseApplication = new BaseApplication();}return baseApplication;}

如果真的想要提供一个获取BaseApplication实例的方法,只需谨记一点,Application全局只有一个,它本身就已经是单例了,无需再用单例模式去为它做多重实例保护了!

getInstance()方法可以照常提供,里面不要做任何逻辑判断,直接返回baseApplication对象就可以了,
  在onCreate()方法中我们将baseApplication对象赋值成this,this就是当前Application的实例,那么baseApplication也就是当前Application的实例了。

package com.jyr.total.project;
import android.app.Application;
import android.content.Context;/*** Create by JiYaRuo on 2021/8/25.* Describe:BaseApplication*/
public class BaseApplication extends Application {//获取到主线程的上下文private static BaseApplication baseApplication;private static final String TAG = "BaseApplication";@Overrideprotected void attachBaseContext(Context base) {// 在这里调用Context的方法会崩溃super.attachBaseContext(base);// 在这里可以正常调用Context的方法// 也可以在这里初始化全局变量}@Overridepublic void onCreate() {super.onCreate();baseApplication = this;
//        ToastUtil.init(this);}/*** 获取BaseApplication实例*/public static BaseApplication getInstance() {return baseApplication;}/*** 适配字体过大的手机(老年机)*/@Overridepublic Resources getResources() {Resources res = super.getResources();Configuration config = new Configuration();config.setToDefaults();res.updateConfiguration(config, res.getDisplayMetrics());return res;}
}

在AndroidManifest.xml文件中对MyApplication进行指定,如下所示:

<applicationandroid:name=".BaseApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.TotalProject"></application>

Android---BaseApplication相关推荐

  1. Android 保存崩溃日志到本地目录下

    代码如下可以直接复制过去,别人的代码修改了下 package com.hly.rtxt; import android.annotation.SuppressLint; import android. ...

  2. android组件浮动在activity上_Jetpack Hilt 依赖注入框架上手指南

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:LvKang-insist 链接:https://juejin.im/post/5efdff9d6fb9a07e ...

  3. 浅谈Android组件化

    一个关于组件化的念头 项目经历了岁月的洗礼,经过公司业务上的变化,开发人员的来来往往,代码越来越臃肿和复杂难懂,这时候就必须进行拆分,否则就是一场灾难.就像我们公司的老项目一样,耦合度极高,已经停掉的 ...

  4. dagger android,dagger.android多模块项目实现

    本文适合有一定的Dagger2使用基础的同学 前两篇文章我们讲了两种多模块项目怎么使用Dagger2. 发现在每个Activity的onCreate中都需要调一个inject方法NewsCompone ...

  5. Android MVVM 架构应用实现

    以前项目中虽然也使用MVVM架构,但由于整体框架不是我自己搭建的,导致我对于MVVM架构的整体还是很不熟悉,所以这次就自己搭建并实现一次MVVM架构. MVVM架构使用的组件有ViewModel.Li ...

  6. 为何需要Android组件化,如何搭建?

    为什么需要android组件化? 因为,一个项目(APP)里面有很多功能模块啊,有些功能模块完全可以提出来公用.例如:网络请求(登录.注册).图片处理(压缩.点击)等. 张华洋老师博客说的很多:And ...

  7. Android热修复之 阿里开源的热补丁

    1.概述   上一期讲到Android热修复之 - 收集崩溃信息上传至服务器,我们获取到用户手中上线的崩溃信息上传到服务器后该怎么办?如果直接发布版本要用户去下载肯定不乐意.这一期我们来看一下怎么去打 ...

  8. Android 网易云信获取图片,Android 网易云信集成(一)

    网易云信流程与账号管理 关于网易云信的注册还有应用管理就不说了,先说下网易云信的通信流程,只有清楚流程,你才能知道自己要做什么. 先是你的服务器端拿着accid还有其他参数发给网易云信,生成一个tok ...

  9. Android应用程序目录结构框架搭建

    此文章转载至http://blog.csdn.net/sun4733/article/details/40892419?utm_source=tuicool&utm_medium=referr ...

  10. Android分享-微信、Facebook、Google

    1.引入分享库: implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.1.4' implementation ...

最新文章

  1. 【每日随笔】使用 you-get 获取网页中的视频资源 ( Python 环境安装 | you-get 工具使用 )
  2. CSS定位(postion)和移动(float)
  3. 设计模式(二)————观察者模式
  4. 解决JBoss只能通过localhost访问不能通过IP的问题
  5. 中专科学计算机应用基础试题及答案,职业中专《计算机应用基础》期中考试试卷...
  6. FCOS 基于FPN之上的完全Anchor Free检测框架
  7. JavaWeb【Velocity】
  8. asyncdata 获取参数_nuxt的asyncData发送post请求如何传递FormData形式的参数
  9. C++之嵌套内部类用法
  10. HDOJ--2112--HDU Today
  11. 最大似然估计与最小二乘
  12. GoogleNews-vectors-negative300.bin文件下载
  13. FileZilla Server 中文版使用教程
  14. Markdown文档编写规则:标题
  15. pybind11中文资料(第五章 面向对象的代码)
  16. AI+视频技术助力保障校园安全,校园智能安防平台该如何建设?
  17. 实现strStr()函数(C++)
  18. C语言-文件读写操作
  19. 数组-数字组合II-中等
  20. Unity与Processing的画面传输(Spout 接收与发送)

热门文章

  1. 华硕笔记本重置计算机,win10系统华硕笔记本恢复出厂设置的详细方案
  2. 【python】openpyxl修改文字,边框等样式
  3. sqli-labs 第五关
  4. 淘宝拼多多抖音1688苏宁淘特京东等平台关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口,分类ID搜索商品列表接口,关键词搜索商品销量接口)
  5. 机器学习练习记录(1):伪逆法、势函数、基于二次准则的H-K函数、感知器法
  6. 数据可视化学习(数据可视化基本概念)
  7. 基于node.js的vue_基于Vue.js和Wilddog的可怕站点danmu项目
  8. HTMLCSS三列布局
  9. 少儿编程启蒙课程3:冰河世纪 调试程序
  10. 1.9 微信消息发送示例