一、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. 解决因为google cdn无法访问导致无法打开stackoverflow等网站的方法

    许多网站使用了Google的CDN来加速Jquery之类的库来加速网站访问,但由于方校长发福利的原因,导致这些网站很容易出现无法加载"ajax.googleapis.com"而出现 ...

  2. Centos7 内核从3.10升级到4.12过程

    http://blog.csdn.net/youshijifen/article/details/73472434

  3. mogodb优化

    http://snoopyxdy.blog.163.com/blog/static/6011744020157511536993/ http://www.csdn.net/article/2012-1 ...

  4. linux下的系统调用函数到内核函数的追踪

    http://blog.csdn.net/maochengtao/article/details/23598433

  5. GridView Item 大小可能不一样,如何保持同一行的Item 高度大小相同,且GridView高度自适应!

    昨天用到GridView,但是遇到几个问题,就是GridView默认的item其实大小是一致的,但是我们经常会遇到item大小不同,系统默认会留白的问题,很头疼!如下图这样的:      就会造成,右 ...

  6. 使用wget提示无法建立SSL连接

    wget 下载URL 提示无法建立SSL连接 解决方法: 原命令上加上" --no-check-certificate" 这是因为wget在使用HTTPS协议时,默认会去验证网站的 ...

  7. 如何将Emmet安装到Notepad++?

    1.下载Notepad++插件;(zen-Coding for Notepad++)2.解压后将压缩包中的文件放入Notepad++安装目录下的plugins文件夹中;3.重新启动就能看到菜单栏上增加 ...

  8. UIControl的子类UISwitch, UISegmentedCntrol, UIPageControl详解

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  9. Win7下安装pip

    1.首先下载setuptools,下载地址https://pypi.python.org/pypi/setuptools#downloads2.解压下载后的文件,进入命令行,将目录切换到解压后文件夹所 ...

  10. javascript转换日期字符串为Date对象

    把一个日期字符串如“2007-2-28 10:18:30”转换为Date对象: 1: var strArray=str.split(" "); var strDate=strArr ...