zoukankan      html  css  js  c++  java
  • Android 中的 Context

    主要的功能是加载和访问资源(Context通常用来获取APP资源,创建UI,获取系统Service服务,启动Activity,绑定Service,发送广播,获取APP信息等)

    如何理解:

    • 我们可以理解为“上下文”:它贯穿整个应用;
    • 也可以理解成“运行环境”:它提供了一个应用运行所需要的信息,资源,系统服务等;
    • 同样可以理解成“场景”:用户操作和系统交互这一过程就是一个场景,比如Activity之间的切换,服务的启动等都少不了Context。

    Context实例创建的情况:

    • 创建Application 对象时, 而且整个App共一个Application对象
    • 创建Service对象时
    • 创建Activity对象时

    Context相关类的继承关系:

    在android中有两种context,一种是 application context,一种是activity context,通常我们在各种类和方法间传递的是activity context。
    比如一个activity的onCreate:

    protected void onCreate(Bundle state) {
        super.onCreate(state);
     
        TextView label = new TextView(this); //传递context给view control
        label.setText("Leaks are bad");
     
        setContentView(label);
    }

    把activity context传递给view,意味着view拥有一个指向activity的引用,进而引用activity占有的资源:view hierachy, resource等。 这样如果context发生内存泄露的话,就会泄露很多内存。 这里泄露的意思是gc没有办法回收activity的内存。

    Leaking an entire activity是很容易的一件事。

    当屏幕旋转的时候,系统会销毁当前的activity,保存状态信息,再创建一个新的。

    避免context相关的内存泄露,注意以下几点:

    •  不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的
    • 对于生命周期长的对象,可以使用application context
    • 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化
  • 相关阅读:
    Superset 制作图表
    superset 安装配置
    python 虚拟环境 pyenv
    pymysql 单独获取表的栏位名称
    pymysql 返回数据为字典形式(key:value--列:值)
    Oracle/MySQL decimal/int/number 转字符串
    netstat 问题处理
    MySQL 中Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
    MySQL执行计划extra中的using index 和 using where using index 的区别
    ref与out
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/6292415.html
Copyright © 2011-2022 走看看