一、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. php中的var_dump()方法的详细说明

    首先看看实例: <?PHP$a = "alsdflasdf;a";$b = var_dump($a);echo "<br>";//var_du ...

  2. 【转】2012年6月26 – PPS网络电视PHP工程师最新面试题

    每一次面试都是一场较量,和面试官,更是和你自己! 前言:虽然面试职位是PHP工程师,但题目仅绝非限于PHP,甚至都没有多少PHP的题!inner peace!希望能给你带了一丝帮助. PPS网络电视面 ...

  3. MySQL审计功能

    http://blog.itpub.net/29733787/viewspace-1604392/

  4. 海思hi3518 移植live555 实现H264的RTSP播放

    用海思的交叉编译工具交叉编译live555 ,结合海思例子venc中的H264部分,完成RTSP的视频数据发布. 用vlc可以播放,但是实时性比较差,慢了5秒

  5. Js组件layer的使用

    作为独立组件使用 layer 引入好layer.js后,直接用即可 <script src="layer.js"></script> <script& ...

  6. JavaScript 中 Object ,Prototype 相关的属性和方法

    span { font-family: 'Consolas'; font-size: 10pt; color: #ffffff; } .sc0 { } .sc2 { color: #c0c0c0; } ...

  7. Jni本地多线程回调Java函数,env->findClass()失败。

    遇到的问题,Native层本地多线程回调Java函数时env->findClass()失败. 前面的代码是这样的在 JNI_OnLoad记录全局变量g_vm static JavaVM* g_v ...

  8. go语言基础之导入包的常用方法

    1.导入包 示例: 法一 package main //导入包,必须使用,否则编译不过 import "fmt" import "os" func main() ...

  9. Thinkphp学习笔记6-redirect 页面重定向

    ThinkPHP redirect 方法可以实现页面的重定向(跳转)功能.redirect 方法语法如下: $this->redirect(string url, array params, i ...

  10. 开源力量:微软竟开源 PowerShell

    导读 曾经有段时间,微软称 Linux 是“癌症”,但是随着时光流逝,现在微软已经认识到了开源世界的不断增长,除了在这个领域加大投入之外别无选择.微软已经启动了几个开源项目,希望能吸引一些 Linux ...