更新时间:2025 07 23 01:28:28 作者 :庆美网 围观 : 78次
大家好,今天小编来为大家解答bitmap.recycle这个问题,很多人还不知道,现在让我们一起来看看吧!
身为程序员,自我提升有多重要?我相信大家应该都是心照不宣的, 由于技术的深度、广度以后是决定你在职业发展过程中所带给你的竞争力,而自我提升时拥有一份好的学习资料就显得尤为重要了,因为有太多人就是输在起跑线上的。
网络上,Android免费资料发送的铺天盖地。但是,知识的完整度、深度和系统的完整性在你心里真正能打几分,恐怕只有你自己才能够知道了。而这份小编通过这些年的经历耗时三个月整理出来的:《 Android 中高级面试题合集》一经发布,两个月内在 Github 走红,犹如一匹脱缰的黑马,有着 10.8K+Star 的红绸加持,迅速登顶了Android圈内热榜!
第一章Java部分:
第二章Android 相关:
题库实在是有点多,由于篇幅原因,也为了不影响阅读,能展示的内容就到这里了,(注意文章展示的是题库,答案也也整理成PDF)需要完整版PDF文档的小伙伴可以后台私信关键词【666】即可获得免费领取方式。
一份好的Android学习资料能帮助你在进阶的路上突破瓶颈期,修复自我技术上的短板。但是这都是基于你拥有自律的学习习惯、良好的学习态度,所以,希望拿到这份《Android中高级面试合集》的朋友能够严于律己、努力提升,才能在面对职业危机时,显得从容不迫。并且我相信对即将想要在明年金三银四中跳槽的小伙伴会有很大的用处。
如果你即将想要跳槽或是需要进阶,觉得这份资料正好你需要,可以后台私信关键词【666】即可获得免费领取方式。
先是题外话,17届同学注意啦,BAT、网易、微软和Google中国的内推都开始啦,赶紧联系学长学姐让自己多一次机会吧,内推失败不会影响你的正常网申。
OK,广告结束,进入正题。
在你日后参加的每一场Android面试里,一定都会被问到同一个问题,“你用过哪些手段来优化APP的性能?”。
在回答这个问题的时候,我建议采取小学体育老师教我的叙述方法——总—分的形式。先总的来说“在APP开发过程中,可能遇到的性能问题包括内存泄露、内存溢出、布局重叠、ANR以及线程爆炸等”;随后,分别说“比如,为了避免内存泄露,我曾经……”下面,我们具体看看“总”和“分”具体包括了哪些内容,面试的时候大家可以自己选择一部分作为答案。
1.总
为了向面试官描述APP可能遇到性能问题时,我们自己首先要清楚这些问题指的是什么。
首先,看看内存泄露和内存溢出。他们有啥区别,简单来说——内存泄露是指,该释放的资源不释放,导致本可以被系统回收的内存无法回收;内存溢出是指,你要的内存太大系统给不了。什么场景下会导致内存泄露和内存溢出呢?
内存泄露的几种常见场景,广义上说都是该释放的不释放,如:用完Bitmap不调recycle(),查完数据库不关Cursor,跑完动画(属性动画中的无限循环动画)不调cancel(),注册(Receiver,EventBus)过后不unregister();而内存溢出,最常见的出现在Bitmap中,当我第一次做用户头像上传的功能时,每次拍完照,直接点击上传,APP先是卡住,而后崩溃。这就是由于Bitmap所占内存过大导致的。
其次,让我们了解下布局重叠。冬天穿衣服很麻烦,因为你得一件一件套,裹得跟个粽子似的。Android跟人一样,如果你让它在屏幕的同一个位置重复画很多次布局,它就会很烦躁,可能出现卡帧的情况。这就是所谓布局重叠的问题,大家可以打开自己手机,设置—辅助功能–开发人员工具–硬件加速渲染—调试GPU过渡绘制— 显示过渡绘制区域,来查看每个APP的布局重叠状态,各种颜色的含义如下图所示。
此外,ANR是由于在主线程里做了耗时操作,造成Activity在5秒内无法对触屏或输入时间做出相应;而线程爆炸则出现在我们频繁创建和销毁时,这类操作会导致大量线程相互争抢资源而造成阻塞。
2.分
在“总”的说完后,就可以挑两个谈谈我们的处理办法了。比如Bitmap占用内存过大的问题,我们的处理办法是什么呢?在拍照上传头像这样的场景里,可以通过增加一个裁剪页面,来主动控制所要上传头像的大小。而在图片加载这样的场景里,我们可以使用BitmapFactory.Options先设置好我们需要的图片尺寸(指的是我们为某个imageview预先设置的尺寸,这个尺寸一般都比原始图片小的多),随后在进行加载,这样也可以避免OOM问题。再比如布局重叠的问题,我们可以通过
除了上面举的这两个例子外,性能优化的手段还包括:ViewHolder的使用,线程池的使用(AsyncTask是基于线程池的),通过判断Listview的滚动状态动态执行数据的加载(如快速滚动时暂不加载,静止或慢速滑动时加载),适当使用软引用以及使用SparseArray代替HashMap等。
最后,如果使用过像MAT这样的内存分析工具就更好了,它可以帮助你快速定位项目中存在的内存泄露问题,如下图所示。
切记,回答这种问题的时候看着面试官的眼镜,不要低着头像背课文一样,很不好呦~希望大家能够多多订阅,谢谢大家啦~DX
【CSDN现场报道】10月14日-16日,“ 2015移动开发者大会· 中国”(Mobile Developer Conference China 2015,简称MDCC 2015)在北京新云南假日酒店隆重举行。本次大会由全球最大中文IT社区CSDN和中国最具关注度的全方位创业平台创新工场联合主办,以“万物互联,移动为先”为主题,邀请国内外业界领袖与技术专家公论移动开发的热点,在实践中剖析技术方案与趋势。
10月15日下午,平台与技术-Android专场继续进行,腾讯Android工程师胡凯,个推高级技术总监董霖,快的打车移动端架构师吴更新(Trinea),android-gems.com作者、前阿里巴巴工程师廖祜秋和Marvell高级研发经理陈家林五位一线专家,分别针对Android应用开发工作中五个方面的重要议题——内存优化、远程问题诊断和监测、图片缓存源码解析、React Native for Android以及应用安全保障等分享了各自的经验 。
腾讯Android工程师胡凯:Android内存优化的5R法则(PPT下载地址)
胡凯首先介绍Android内存管理中的内存回收、内存泄露、内存分析等基础知识,其目标是更多的内存空间,和尽量减少GC行为。胡凯认为,可以通过5R法则来实现这两点。
腾讯Android工程师 胡凯
个推高级技术总监董霖:Android远程问题诊断和监测(PPT下载地址)
董霖首先谈到在LBS场测过程中,要认识到远程日志调试的重要性并思考如何解决这个问题。一个合格的应用程序发版需要经历Demo内测、FA场测和灰度升级,最后才能在市场上架。在此过程中Trac或者Jira问题不断出现,紧接着董霖谈到需要此时手机的两点刚需:一是开Log,看Log;二是看屏幕,截屏。除此以外,也需要通过手机看“关于”信息,或者执行一些Shell命令。现有的日志管理工具如Logstash和Graylog2,虽然综合评估Graylog比较专业,但这些都是针对服务端日志管理,没有支持移动平台的工具。此外仅能够进行Crash分析是远不够的,同时也需要解决非Crash的程序逻辑问题。董霖解释到解决方法仅需简单的4步:确定设备、打开日志、上传日志、分析日志。接下来他主要讲解了Logful架构,其中架构中自行开发的部分是LogfulSDK、LogfulWeb、LogfulAPI。使用此架构可以对日志进行广泛埋点。
个推高级技术总监 董霖
他详解了Demo案例,首先初始化、查看日志记录,例如调查日志模板;在Logfulweb平台上利用Dashboard、管理工具等工具,根据关键字搜索或者type搜索日志,进行日志文件分析。他采用了漏洞分析分方式,得到传统的统计SDK,无法精确到任务级别进行汇总统计,需要借助详细日志分析。LogfulSDK架构分为三层,底层是Logservice,中层是Logcontroller,上层是LogAPI。在日志级别以及资源评估方面均有自己的创新点,并且Logful架构具有很高的并行可扩展性。他总结到该架构的特色功能:截图支持、日志预录、别名支持、日志模板、数据监控以及核心功能:Android/iOS支持、日志加密存储和上传、日志检索、实时日志开关、灰度日志开关、Wifi下上传。最后董霖谈到将在11月中旬对Logful架构进行开源。
快的打车移动端架构师吴更新(Trinea):Android开源项目源码解析之图片缓存对比(PPT下载地址)
吴更新首先介绍选择开源项目的三大优势,可以实现开速开发,站在巨人的肩膀上,和借助社区的智慧,以及选择开源项目时需要考虑的因素,包括:1.Star、PR、Issues、维护;2.文档;3.原理;4.业务场景。
图片缓存目前的主要开源项目包括Imageloader,Picasso、Glide和Fresco,其中Fresco还是0.7版本。他分享了前面三个比较成熟的库的流程、设计和特性对比,涵盖 RequestManage、Engine、 GetDatainterface、Displayer、Decode、Encode、Processor等重要概念。
快的打车移动端架构师 吴更新(Trinea)
他介绍,这些项目的共同优点是:使用简单;可配置都高、自适应程度高;多级缓存;支持多种数据源。单独来说,Imageloader的优点是:支持下载进度显示;可以在View滚动中暂停图片加载;默认实现多种内存缓存算法;支持本地缓存文件名规则定义。Picasso的优点是:自带统计监控功能,有利于节省流量;支持优先级处理;支持延迟到图片尺寸计算完成加载,即加载完成之后再显示;支持飞行模式、并发线程数根据网络类型而变;“无”本地缓存。Glide的优点包括:除了图片缓存,还支持媒体缓存;支持优先级处理;与ActiveFragment生命周期一致,支持trimMemory;支持okhttp和Volley,但与Picasso不一样的是,有自己的本地缓存;内存友好。
总体来说,功能上,Glide最为出色。但代码理解上,Picasso更胜一筹,代码量比较少,设计清晰,而Glide代码量很大,概念众多。对于正常使用,他建议,优先用Picasso,因为Picasso源码解决会比较快,Glide会更加耗费精力。
android-gems.com作者、前阿里巴巴工程师廖祜秋:React Native for Android(PPT下载地址)
廖祜秋首先谈到了JavaScript,其中有:JSC(JavaScriptCore)、NPM(Node Package Management)、Module、JSX Synax。 然后谈到了React Native开发过程时–从H5/JS封装到Reactbride,再到React Native。快速启动时,非常简单,仅需一句操作命令就可。在服务器调制(Debug Server)时,APP和Server相互调度资源。
android-gems.com作者、前阿里巴巴工程师廖祜秋
谈到两个平台运行Demo时,iOS首先是在Xcode中打开工程,然后再运行。Android运行方式:一是模拟器;二要求5.0以上版本以及adb反向接口;三是配置调试服务器。数据包分发方面,iOS相比Android更为简单。
为什么我们需要React Native?他从以下几点进行了解释:具有Native的外观和感觉、可接受的性能、代码的复用性很强、能够进行快速的开发和部署。他解释到React?Native的核心包括:ReactBridge、JavaScriptModule、NativeModule、Native UI Components。你可以利用其设置全局变量,传递参数。谈到代码复用时,这里具有很多优势:一是UI复用;二是模块复用。对于热部署:目前的Apphub,能快速更新本地应用程序,但目前仅支持iOS系统。
在性能方面,首先是性能来源问题:发展模式(dev=true)、慢导航转换、ListView的初始化太慢或者对较大的列表很难访问。使用React Native而非基于WebView工具的有令人信服的点:一是实现60 FPS;二是使得你的应用程序更加像React。
在谈到React Native为什么目前不能成为主流问题时,他解释道:一是跨平台测试问题;二是iOS和Andriod代码库融合问题。最后他希望到一个工程师应该全能,不局限某种语言,并且应具有创造力且能够认真努力工作。
Marvell高级研发经理陈家林:Android应用安全检测(PPT下载地址)
陈家林的分享包括三点:安卓应用典型问题分析,第二如何分类安卓应用安全,第三如何找到应用安全测试工具。首先他列举并分析了几个应用典型问题。
Marvell高级研发经理 陈家林
陈家林认为,安全的关键是定义边界,他将Android应用安全分为本地接口安全、本地存储安全、传输安全、服务器安全和其他安全等5个大类,29个测试点。
最后他分享了如何找到应用安全测试工具这个问题的见解,具体方法是寻找测试工具、建立测试集合、量化测试工具,并分享了三个工具的玩家:阿里聚安全、腾讯金刚、360捉虫助手。利用开源来丰富这个集合,AuditDroid通过提供测试用例代码来协助开发者理解安卓移动应用安全问题。这里有29个测试点,80个测试用例。用现有的测试工具对这29个测试点的覆盖率、检出率、误报率进行测试并得出了结论。
更多精彩内容,请关注新浪微博:@CSDN移动,图文直播专题:2015移动开发者大会。
近年来,随着人们对于母乳喂养的重视程度不断提高,接近母乳的奶粉也逐渐成为了消费者们关注的焦点。但究竟哪些品牌的奶粉才能被认为是最接近母乳的呢?今天,我们将为您揭晓排行榜
大家好,今天小编要和大家聊一聊关于奶粉的话题。随着生活水平的提高,越来越多的父母开始关注宝宝们的饮食问题,其中最重要的就是奶粉选择。那么问题来了,哪些品牌的奶粉最受欢迎
奶粉,是宝宝成长过程中不可或缺的重要营养来源。然而,面对市场上琳琅满目的各种品牌奶粉,很多父母都会陷入选择困难。究竟哪些品牌的奶粉能够跻身销量排行榜前十?这其中又有哪些
在如今的市场上,奶粉无疑是备受关注的产品之一。随着人们对生活质量的要求提高,进口奶粉也逐渐成为了消费者们的首选。但是,什么是进口奶粉?它有什么特点?哪些品牌的奶粉是进口的
近年来,随着人们生活水平的提高和健康意识的增强,进口奶粉备受关注。但是,什么是进口奶粉?为什么它备受关注?它有哪些优势和劣势?哪些品牌的奶粉是进口的?它们有什么特点和价格如何
嗨,亲爱的小伙伴们!今天我们要聊的话题是关于生活百科行业的,标题就是“哪些品牌的奶粉是有机的?”这个问题相信很多妈妈们都很关心吧。毕竟,给宝宝选择奶粉是一件非常重要的事情
用户评论
真心太赞了!之前一直以为Bitmap回收只有手动调用GC去处理,沒想到还有这么方便的API直接就能 recycle, 感觉效率提升了不少。
有16位网友表示赞同!
这个功能真得要学习一下啊,现在内存管理对我们来说越来越重要,而且bitmap经常被用到。学会 bitmap.recycle 肯定能优化很多地方。
有18位网友表示赞同!
我一直用手动释放的方式来处理Bitmap回收,没想到还有更直接的办法!这篇文章让我受益匪浅啊!赶紧把这个 API 用到项目里试一下.
有14位网友表示赞同!
这个文章写的太简单了,完全看不懂 Bitmap 的机制和内存管理。希望可以后续出一些更加深入的文章解释相关概念。
有12位网友表示赞同!
bitmap.recycle 确实很实用的功能,每次用完 Bitmap 记得及时放生啊,避免内存泄漏。
有7位网友表示赞同!
之前没注意过这个 API ,现在看了一下感觉好强大啊!之前处理 Bitmap 的时候可是费了不少功夫的。
有17位网友表示赞同!
我觉得 bitmap.recycle 这种方法虽然好用,但它可能不适用于所有场景, 比如一些特殊情况下, 可能需要手动管理Bitmap的生命周期.
有5位网友表示赞同!
感觉这个 API 好像没太大用处啊,因为 Android 自身已经做了很不错的自动内存回收机制, 直接用 recycle 好像意义不大...
有12位网友表示赞同!
bitmap.recycle ,这功能真的太好用了!之前有时候开发的时候会遇到内存溢出的问题,现在学习了这个方法应该能够解决很多问题。
有12位网友表示赞同!
文章讲解得太简单了,对于刚接触 Bitmap 的新手来说可能没有太多帮助,希望作者可以更详细地解释一些关键概念.
有5位网友表示赞同!
bitmap.recycle 确实很方便,但是需要注意的是,Bitmap 被回收后,它所占用的内存空间并不是立即释放的, 而是需要等待系统垃圾回收机制。
有18位网友表示赞同!
其实除了 bitmap.recycle ,还有很多其他的方法可以用来优化 Bitmap 的内存管理, 比如使用 BitmapFactory.decodeResource 等方式.
有11位网友表示赞同!
这个文章主要讲了 Bitmap recycle 一种简单的方法,但我发现在实际项目中,还需要考虑更复杂的情况,才能真正进行有效的内存管理.
有14位网友表示赞同!
看到标题就觉得这篇文一定很有用啊!之前用 Bitmap的时候总感觉内存压力很大,现在看看能不能通过 bitmap.recycle 来解决问题。
有5位网友表示赞同!
我以为Bitmap回收就是手动调用GC去处理,没想到还有 bitmap.recycle 直接回收的方法,太开心了,赶紧把这篇文章分享给我的老铁们!
有18位网友表示赞同!
bitmap.recycle 的用法很简单,但它带来的效果却很显著! 现在可以更轻松地管理应用程序的内存。
有19位网友表示赞同!
学习了这个方法之后,我的代码更加清爽干净,而且运行起来也更快了!
有8位网友表示赞同!