• 安卓 Context 和 Application的关系


    1. 我开始一直不理解显式Intent中传一个this(当前的activity)是为什么。因为Intent里面的构造方法对应的只有 Context, Class。后面查资料才发现

      

    Intent i = new Intent(this, AnotherAty.class);  // 在activity里面调用。
    public Intent(Context packageContext, Class<?> cls) {
            mComponent = new ComponentName(packageContext, cls);
        }

        是因为 activity都继承了 android.content.Context。下面是官方的解释。

      关于应用程序环境的全局信息的接口。这是一个抽象类,它的实现是由安卓系统提供的。它允许访问应用程序特定的资源和类,以及应用级的操作,如启动活动,电话,广播和接收的意图,等等。

      其实说白了就是上下文,可以获取全局资源。(刚刚学到这里,其他的方法可以取查手册)

    this.getResources().getString("app_name");  // activity调用可以获取到全局的 app_name 定义的值

    2. android.app.Application 类

       需要维护全局应用程序状态的基类。你可以通过在你的AndroidManifest.xml指定其名称提供自己的实现。XML <application>标签,这将导致这类被实例化时为您为您的应用程序/包创建过程。

       例如你定义了一个全局类, App继承了Application , 那么你要到  XML <application>标签 中设置 android:name=".App" 

     这样你的所有的activity都可以共享这个App类了。 其实每个activity也是继承了这个Application类。 同时Application类也继承了 Context类

    App app = (App)this.getApplicationContext();  // 在activity中调用  里面肯定有 getResources()方法

      

     Application里面有很多方法可以使用,这里介绍一个 onCreate(); 当App创建的时候执行。可以在这里初始化app的参数。

     这里要注意的是:每个Actvity创建的时候,都会执行APP里的onCreate方法, 并且会在Actvity的onCreate方法前面执行。这个是要注意的。

    ps: 刚刚学习,记录一点。 以后有更好的心得在更新

  • 相关阅读:
    linux----别名
    linux---三剑客
    如何給linux安装 jdk呢?
    linux---文件颜色含义
    reason: no instance(s) of type variable(s) exist so that ProjectByProvinceVO conforms to ProjectDetailVO
    jrebel的坑
    使用自定义注解,但是运行时获取不到注解的值
    springboot启动失败,没有任何提示,trycatch也没有输出
    case when 中计数如何去重
    case when 中如何使用计数
  • 原文地址:https://www.cnblogs.com/shaoshao/p/5859900.html
Copyright © 2020-2023  润新知