• Android中 Applicaton Context,Service context, Activity context 的区别。


    Context类图

    类间关系https://weichao.blog.csdn.net/article/details/129969122
    在这里插入图片描述
    Context是一个抽象类,定义了接口,它的实现类是ContextImpl类。
    ContextWrapper是Context的派生类,它实现了Context类的接口。但是ContextWrapper类所有方法的实现只是转调其成员变量mBase的方法。mBase本身也是Context对象,其类型是ContextImpl,因此,ContextImpl类才是Context类真正的实现。这种设计模式称为代理模式或包装者模式。这种设计模式的好处是把接口和实现分离,可以动态地切换多种实现。

    ContextImpl类是Context的真正实现类,它集成了应用框架的一些核心对象,如ActivityThread对象。

    Activity,Service,Application都是从ContextWrapper类派生出来的。Activity是通过ContextThemeWrapper类间接派生的,这样实现的目的是为了实现Activity中单独的Theme。一个应用中可以有一套全局的Theme,同时每个Activity还可以有自己的Theme。ContextWrapper类的成员变量中保存Theme资源和Resource资源。这样它的派生类Activity就能有独立的Theme。

    区别:

    在安卓开发中,Application Context、Server Context和Activity Context都是Context类的子类,但是它们之间有一些区别。

    1. Application Context:
      是整个应用程序的上下文,它的生命周期与应用程序的生命周期相同。它可以访问应用程序的资源和类,如Resources和AssetManager,并且可以启动新的Activity、Service、发送广播消息等。它的作用范围是整个应用程序,因此它不会受到Activity的生命周期的影响

    2. Server Context:是Service的上下文,它的生命周期与Service的生命周期相同。它可以访问应用程序的资源和类,如Resources和AssetManager,并且可以启动新的Activity、Service、发送广播消息等。它的作用范围是整Service,因此它不会受到Activity的生命周期的影响

    3. Activity Context:
      是Activity的上下文,它的生命周期与Activity的生命周期相同。它可以访问应用程序的资源和类,如Resources和AssetManager,并且可以启动新的Activity、Service、发送广播消息等。它的作用范围是整个Activity,因此它会受到Activity的生命周期的影响

    扩展:

    在Activity中使用 View.inflate(context,r.layout.xxx)方法时,如果使用Application Context,则获得的View将不会受到Activity的生命周期的影响,即使Activity已经被销毁,View仍然存在。而如果使用Activity Context,则获得的View将会受到Activity的生命周期的影响,即当Activity被销毁时,View也会被销毁。

    总的来说,这三种上下文都可以访问应用程序的资源和类,如Resources和AssetManager,并且都可以启动新的Activity、Service、发送广播消息等。但是它们的作用范围不同,因此在使用时需要根据实际情况进行选择。

  • 相关阅读:
    Cy3-PEG-maleimide,Cy3-聚乙二醇-马来酰亚胺,MAL-PEG-Cy3
    JAVA开发技术能力和学历哪个重要?
    springboot+vue球员数据统计分析系统java
    【Unity Shader】屏幕后处理1.0:调整亮度/饱和度/对比度
    zabbix 自动发现
    数据结构和算法——数据结构
    数据结构八大排序Java源码
    视觉信息处理与FPGA实现第三次作业-7人表决器
    如何发送入职通知语音信息?入职语音通知实现方案
    在 Substance Painter中自定义Shader
  • 原文地址:https://blog.csdn.net/o279642707/article/details/134292955