相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力.今天我们就谈谈在Android平台下内存的管理之道,开始今天的主题之前,先再次回顾两个概念. 内存泄漏:对象在内存heap堆中中分配的空间,当不再使用或没有引用指向的情况下,仍不能被GC正常回收的情况.多数出现在不合理的编码情况下,比如在Activity中注册了一个广播接收器,但是在页面关闭的时候进行unRegister,就会出现内存溢出的现象.通常情况下
先一睹Dalvik虚拟机在Android系统框架图中位置: 文章目录: 一.虚拟机简述二.Java虚拟机简述三.Dalvik虚拟机简述四.Dalvik虚拟机与Java虚拟机的区别五.Dalvik虚拟机执行原理简述 此文章原始是PPT格式已转换为PDF,请直接下载文档阅读: AndroidDalvikVMOverview
前言 大家或许在iOS程序开发中经常遇到屏幕旋转问题,比如说希望指定的页面进行不同的屏幕旋转,但由于系统提供的方法是导航控制器的全局方法,无法随意的达到这种需求.一般的解决方案是继承UINavrgationViewController,重写该类的相关方法,这样虽然也能解决问题,但是在重写的过程中至少产生两个多余的文件和不少的代码,这显然不是我们想要的.下面就使用一种较底层的方法解决这个问题. 基本原理 动态的改变UINavrgationViewController的全局方法,将我们自己重写的su
内存问题一直是大型App的开发人员比较头痛的问题,特别是像手淘这种超级的App,App中到处都是带有图片和视频的界面,而且这些功能都是由不同的团队甚至不同的事业部开发的,要整体上去管控和排查内存的问题变得相当的复杂.之前,我们多个线上版本都存在着严重的Activity等内存泄漏和不合理内存使用.这不是偶然,一个很重要的原因就是我们很多的开发测试人员侧重业务开发,忽略内存和性能,而且没有站在全局性的角度去考虑资源的使用.认为我自己的模块多缓存一些就会加快速度,以空间换时间看似正确,但是在
更新: 2016-10-29:更新handleBindApplication部分. 我这个版本的原则是,有话则长,无话则短. 以下分析基于6.0.1_r10版本. 先看一张大图: 1. 桌面的onClick事件(进程:桌面应用的进程) 我们暂时忽略Input处理的过程,以桌面的onClick事件被触发为起点. 这部分根据Launcher的不同而大同小异. 2. ActivityManagerService之startActivity(进程AmS) 路径:frameworks/base/servi
前言 前段时间,Android平台上涌现了一系列热修复方案,如阿里的Andfix.微信的Tinker.QQ空间的Nuva.手Q的QFix等等. 其中,Andfix的即时生效令人印象深刻,它稍显另类,并不需要重新启动,而是在加载补丁后直接对方法进行替换就可以完成修复,然而它的使用限制也遭遇到更多的质疑. 我们也对代码的native替换原理重新进行了深入思考,从克服其限制和兼容性入手,以一种更加优雅的替换思路,实现了即时生效的代码热修复. Andfix回顾 我们先来看一下,为何唯独Andfix能够做
Android 6.0 变化 Android 6.0 Changes In this document 运行时权限Runtime Permissions Doze and App Standby 阿帕奇 HTTPClient 移除 Apache HTTP Client Removal OpenSSL 的分支 BoringSSL BoringSSL 访问硬件标识 Access to Hardware Identifiers 通知 Notifications 音频管理变化 AudioManage
作者:史宁宁 -----------------------------------------------------------------------------------转载请注明出处--------------------------------------------------------------------------------- 最近,Android中的编译工具链发生了改动,这个改动是Android的runtime(也可以说是VM,这两种说法在Google
Android 4.4提供了一种与Dalvik截然不同的运行环境ART(Android runtime)支持,ART源于google收购的Flexycore的公司.ART模式与Dalvik模式最大的不同在于,启用ART模式后,系统在安装应用的时候会进行一次预编译,将字节码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升.这种编译的方式与c++,c语言编译方式蛮像. 虚拟机切换设置 Settings> Developer Options> Select R