Android开发:MyApplication类中this与getApplicationContext()的区别?
嘿,这个问题问得相当精准!先给你的推测点个大大的赞——你说得完全没错,Application本身就是Context的子类,所以getApplicationContext()本质上返回的就是当前MyApplication的实例。不过咱们得把在MyApplication的onCreate()里用这两种方式的情况掰扯明白:
在MyApplication的onCreate()方法内,二者完全等价
此时this就是当前的MyApplication实例,而getApplicationContext()返回的也是同一个对象。你可以做个小测试:打印两个对象的哈希值,会发现它们完全一致。所以在这个方法里用哪个,功能上都不会有任何差异。getApplicationContext()存在的核心意义
这个方法的设计初衷,是为了在**非Application类的Context(比如Activity、Service)**中,获取全局唯一的应用级Context。举个例子:在Activity里,this是Activity的Context(属于场景级Context,会随Activity销毁被回收),而getApplicationContext()拿到的是跟随整个应用生命周期的Context,不会因为页面销毁而失效,非常适合用来初始化全局工具类、单例对象等。小建议
虽然在MyApplication内部二者等价,但有些代码规范会建议在需要全局Context的场景统一使用getApplicationContext()——这样代码的通用性更强,比如以后你把初始化逻辑抽到独立的工具类里,不用修改Context的获取方式。不过在MyApplication的onCreate()里直接用this也完全没问题,写法更简洁。
内容的提问来源于stack exchange,提问作者Boycott A.I.

