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

  • 相关阅读:
    Hash表_拉链法_开放寻址法_模拟散列表
    目标检测YOLO实战应用案例100讲-面向小目标检测的多尺度特征融合(续)
    网络知识——局域网和交换机
    Mysql设计航线包含空运和海运,国家 港口 城市关系表,包含国内和国外(货代)
    流控制传输协议(SCTP)
    在Mysql中一条查询SQL的执行过程是怎样的
    DNS服务器的安全措施都有哪些?
    详解软件测试的项目职责、分工、测试流程
    Halcon 阈值算子汇总
    2021年初行政区划数据
  • 原文地址:https://blog.csdn.net/o279642707/article/details/134292955