一、Context继承体系 与 Context是怎样创建的

1. Context继承体系

仅仅用记住一句:Activity 、 Service 与Application 都是继承自ContextWrapper,而ContextWrapper implements Context。

每一个:Activity 、 Service 与Application都是一个Context实例。



2. Context 何时创建、如何创建的 - 查看源代码


以上3篇文章都是从源代码角度分析Context何时创建的。可是对于平时的开发来说,仅须要知道Activity 与Service 都是继承自Context。仅仅要创建新的Activity 或者 Service 实例,都是创建新的Context实例。

Context 总数 = Activity个数 + Service 个数 + 1个ApplicationContext

能够通过命令行 查看Context的个数
adb shell dumpsys meminfo package_name

二、关于Context的疑问

1. getBaseContext 与 getApplicationContext 差别?
持有Activity的Context 相当于持有Context。而持有AppliactionContex全局仅有这一个

2. 视图中的Context从哪来的?
比如:new TextView(Context);

通常在一个Activity中传入的就是当前Activity或者Activity.getBaseContext()。所以通过View.getContext()事实上就是当前Activity的引用。

常见场景,Adapter通常通过构造器传递Context,用于getView 时inflate 视图。可是getView最有一个參数是parentView 这个是ListView对象本身。能够通过parentView.getContext获取Context对象降低手动传递。

3. Context 会出错的地方
Dialog.Builder必须传入Activity,而不能传入Activity.getApplicationContext()

4. Context作用,查看方法
訪问资源、创建视图、创建四大组件

Context是什么?

參考资料: 

三 内存溢出。由于引用Context导致

1. Context导致内存溢出的原因:
以上文章解说的非常具体能够查看文章。下面是简单描写叙述:
最常见的内存形式是Bitmap未得到释放,而图片通常ImageView持有导致ImageView也不会被GC释放,创建ImageView肯定须要Context,这个Context是Activity。
Bitmap -> ImageView -> Contex(Activity)
假设Activity总是不能得到释放,导致内存不足终于OOM


2. 对于生命周期非常长的对象,使用ApplicationContext,下面文档介绍自己定义Application能够在项目全局都非常方便获取Application Context的方法

使用自己定义Application,须要Context对象时传入。避免因持有Context导致的内存溢出。由于ApplicationContext全局仅有一个实例,而多个Activity本身继承自Context,就是多个Context实例。

Android中Activity共享变量的还有一方法:Application context

4. Context内存溢出相关资料

Android学习系列(36)--App调试内存泄露之Context篇(上)

Android学习系列(37)--App调试内存泄露之Context篇(下)


四、自己创建Context

Android获取其它包的Context实例然后干坏事



Android Context原理与使用的总结的更多相关文章

  1. Android Context 是什么?

    andorid 开发(42)  版权声明:本文为博主原创文章,未经博主允许不得转载. [转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] PS ...

  2. Android root 原理

    Android root 原理 0x00 关于root linux和类Unix系统的最初设计都是针对多用户的操作系统,对于用户权限的管理很非常严格的,而root用户(超级用户)就是整个系统的唯一管理员 ...

  3. NFC(6)NFC编程的几个重要类,NFC硬件启动android应用原理

    用于NFC编程的几个重要类 Tag NFC 标签 NfcAdapter Nfc 的适配类 NdefMessage 描述NDEF格式的信息 NdefRecord 描述NDEF信息的一个信息段,类似tab ...

  4. android的原理,为什么不需要手动关闭程序

    转自android的原理,为什么不需要手动关闭程序 不用在意剩余内存的大小,其实很多人都是把使用其他系统的习惯带过来来了. Andoird大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制 ...

  5. 【转】Android Activity原理以及其子类描述,androidactivity

        Android Activity原理以及其子类描述,androidactivity 简介 Activity是Android应用程序组件,实现一个用户交互窗口,我们可以实现布局填充屏幕,也可以实 ...

  6. Android Context介绍

    转载(Android Context完全解析与各种获取Context方法):https://www.cnblogs.com/chenxibobo/p/6136693.html

  7. 传智播客学习之Android运行原理 (转)

    传智播客学习之Android运行原理 (2010-03-20 22:45:15) 转载▼ 今天终于忙里偷闲,和大家探讨一下android技术,第一次听到3G应该追溯到大学三年级的时候了,记得当时现代通 ...

  8. Android ADB原理及常用命令

    Android调试桥(ADB, Android Debug Bridge)是一个Android命令行工具,包含在SDK 平台工具包中,adb可以用于连接Android设备,或者模拟器,实现对设备的控制 ...

  9. Android LayoutInflater原理分析,带你一步步深入了解View(一)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12921889 有不少朋友跟我反应,都希望我可以写一篇关于View的文章,讲一讲Vi ...

随机推荐

  1. Transistor latch improves on/off circuitry

    Figure 1 shows an example of on/off circuitry commonly used in battery-operated devices. The p-chann ...

  2. 如何注入值到Spring bean属性

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...

  3. shell 编译和执行java文件

    编译java程序 javac test.java 执行java程序 java test 附件test.java class test{         public static void main( ...

  4. jquery-问题解答

    1.var v = $('.summer-input:input').val(); //依据class获取input 2.var v = $('input[name=user\\.name]').va ...

  5. C# 怎么获取所有打开的窗体

    FormCollection collection = Application.OpenForms; foreach(Form form in collection){    if(form.Visi ...

  6. ORACLE 中如何截取到时间的年月日中的年

    在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来,并不是一件难事.常用的方法是:Select to_number(to_char(sysdate,'yyyy')) from d ...

  7. pytest文档9-参数化parametrize

    前言 pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 # content of ...

  8. 负载均衡---在window与linux下配置nginx

    最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,sq ...

  9. RSA大会播报 – 2014最佳安全博客提名

    今年美国RSA大会将在这个月的23-28号举行,每年大会上都会评出过去一年来业内最佳安全博客(Security Bloggers Network Social Security Awards 2014 ...

  10. go语言基础之 if else的使用

    一.if_else 示例1: package main //必须有一个main包 import "fmt" func main() { a := 11 if a == 10 { f ...