• 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、发送广播消息等。但是它们的作用范围不同,因此在使用时需要根据实际情况进行选择。

  • 相关阅读:
    2022鹏城杯
    为什么浏览器控制台(Console)运行JavaScript代码有时会出现“undefined”?
    学习的过程
    Mybatis中limit用法补充
    QTday05(TCP的服务端客户端通信)
    数据分析 - 分散性与变异的量度
    pandas库--DataFrame常用操作
    软考 --- 数据库(3)数据操作
    DeepMind 利用无监督学习开发 AlphaMissense,预测 7100 万种基因突变
    Leetcode 1249. 移除无效的括号(牛逼,终于做出来了)
  • 原文地址:https://blog.csdn.net/o279642707/article/details/134292955