IT技术博客大学习 共学习 共进步
首页 / 张明云的博客
IT 2016-05-05 13:08:17 / 累计浏览 2,420

Android应用内存泄露分析、改善经验总结

这篇讲的是作者如何系统性地分析和改善Android应用的内存泄漏问题。他以实际优化案例开头,展示了将应用退出后内存占用从100多M降至20M以内的显著效果,并成功定位了InputMethodManager和MTK WebView中的具体泄漏点。 作者分享了一套行之有效的方法论:首先遵循“数据说话”和“持续改善”的原则。具体步骤上,建议优先用Android Studio的静态分析解决常见泄漏,比如Handler、未关闭的IO资源和Context使用不当等问题。对于更隐蔽的泄漏,则需要借助Leakcanary或adb命令在程序运行后进行监控,并使用MAT工具对内存快照进行深入分析。文章还详细说明了如何验证改善效果,形成闭环。 整篇文章就像一份手把手的排障指南,从原则、具体操作到验证,流程清晰。特别是对使用MAT时的关键注意事项(如关注Retained Size、排除软弱引用)的总结,对于实际解决问题很有参考价值。

IT 2016-04-02 23:07:35 / 累计浏览 2,220

Android Studio使用过程中遇到的一些问题及解决方案

这篇讲的是作者从Eclipse迁移到Android Studio后,在Windows环境下踩到的一系列“坑”以及他摸索出的解决方案。由于项目涉及JNI编译等复杂依赖,作者采取了在Eclipse中编译JNI、在AS中引用jar和so的过渡方案,并在此过程中总结了十七个具体问题。 文章内容非常“接地气”,直指迁移过程中的核心痛点。例如,如何在build.gradle中正确配置jniLibs路径以加载SO库,如何通过`lintOptions`避免因检查过严导致的编译失败,以及如何解决多模块间的资源文件冲突。除了这些编译与配置问题,文章也覆盖了许多提升效率的设置,比如自动导包、代码格式化快捷键、Logcat颜色自定义,甚至是删除Module的正确操作流程。 作者没有空谈理论,而是将每个问题的背景、原因和修改方法都直接呈现,其中的Gradle配置片段和菜单路径对于遇到同类问题的开发者来说极具参考价值。对于正在或计划进行Eclipse到AS迁移的团队,这些经过实践验证的经验,或许比官方文档更直接有效。

IT 2016-04-02 13:23:15 / 累计浏览 2,060

Android EditText的使用及值得注意的地方

这篇讲的是Android开发中EditText组件的实战技巧与避坑指南。作者从实际开发经验出发,系统梳理了与EditText和输入法交互的多个关键细节。 文章核心围绕如何提升输入体验展开,提供了具体可操作的代码方案。例如,如何通过`setInputType`为不同应用场景(如词典与单词应用)设置默认的中英文输入状态;如何利用`InputMethodManager`手动控制输入法的弹出与隐藏,以配合搜索流程或响应其他窗口事件;以及如何通过`TextWatcher`监听输入内容变化,实现实时字数提示或搜索建议。 此外,文章还涉及了交互细节的优化,比如通过监听按键事件处理输入法回车按钮的确认功能,使用`setImeOptions`自定义回车按钮的文案(如“搜索”或“发送”),以及通过自定义`InputFilter`来限制用户只能输入特定字符(如纯英文或纯中文)。 这些内容覆盖了从基础设置到进阶控制的完整链条,为开发者提供了处理EditText常见场景的实用工具箱,有助于写出更健壮、更符合用户直觉的输入界面。

IT 2016-03-31 22:20:49 / 累计浏览 3,160

Android应用内多进程的使用及注意事项

这篇讲的是 Android 应用内为何以及如何使用多进程。作者从解决主进程内存压力问题出发,指出当应用处理大图片或频繁绘制时容易 OOM,仅靠 `largeHeap` 增加堆内存只是权宜之计,会影响整机效率。因此,引入了多进程方案:通过在 AndroidManifest.xml 中为组件设置 `android:process` 属性,将特定页面(如视频播放)放入独立进程,以分担主进程内存压力。 文章重点分析了使用多进程后会遇到的“坑”。由于每个进程拥有独立的内存空间,会导致三大核心问题:一是断点调试失效,堆栈不连续,通常需要临时移除 `process` 属性来调试;二是 Activity 管理逻辑(如通过 LinkedList 全局退出应用)失效,因为每个进程会独立运行 Application 的 onCreate;三是进程间无法共享内存,通信和数据共享必须借助 Bundle、AIDL 或文件等跨进程机制。 文章最后指出,虽然多进程能缓解内存问题,但这是一种“下下策”,根本之道还是在于做好应用的性能优化。

IT 2016-03-23 14:27:18 / 累计浏览 2,160

Android设置应用内文字的默认颜色和大小

这篇文章解决了一个 Android 开发中常见的主题适配问题:当未显式设置 TextView 或 Button 的文字颜色时,切换应用主题会导致文字颜色意外改变;另外,若想调整 Toast 的文字大小,通常需要重写其内部实现,颇为繁琐。 作者从 Android 主题继承机制出发,提出了一种简洁的方案:在项目的 `styles.xml` 中为应用主题(如 `AppTheme`)直接定义 `android:textSize` 和 `android:textColor` 属性,并在 `AndroidManifest.xml` 中引用该主题。这样,所有未单独设置文字样式属性的 View,都会自动继承主题中指定的颜色和大小,包括 Toast。 这个方案的核心在于利用主题的全局覆盖特性,以最小代码成本统一了应用内文字的默认视觉表现,避免了在每个 View 上重复定义或处理意外的主题变更。需要注意的是,该设置仅作为默认值生效,如果某个 View 已经通过代码或 XML 明确指定了文字颜色或大小,将优先采用其自身设置。

IT 2016-03-23 13:54:21 / 累计浏览 2,040

提升进入界面的速度

这篇讲的是如何让Android应用的界面跳转变得更流畅。作者从一次实际的APP优化项目出发,指出一个常见的性能痛点:点开一个新页面却要等上几百毫秒,这种迟滞感虽然不会触发异常,却严重影响用户体验。 文章的核心方案非常清晰,即针对Activity生命周期中耗时的onPause和onCreate阶段进行优化。作者总结了四个具体的优化方向:对IO等耗时任务使用AsyncTask或Handler进行异步处理;精简布局文件层级,并对非首屏视图大胆使用ViewStub进行延迟加载;将动画、特定字体等资源初始化推迟到真正需要时;以及谨慎使用应用内多进程,因为进程创建本身就很耗时。 文章特别强调了两个容易踩坑的地方:一是像AnimationDrawable这样的资源既耗时又耗内存,初始化时机至关重要;二是不要迷信通用技巧,一切优化都要以实际测量数据为准。最终,持续的性能度量与分析,是保证界面流畅体验的关键。

IT 2016-03-23 13:52:50 / 累计浏览 1,540

Android各个Support Library介绍

这篇系统梳理了Android开发中不可或缺的Support Library。它开篇厘清了主工程、依赖包与android.jar的关系,解释了为何需要将新API封装成独立支持库——以便在不更新系统的情况下,让低版本设备也能用上高版本功能。 文章的核心是逐一介绍了从V4到V17的各个支持库。V4库最为基础和关键,它为Android 1.6及以上系统带来了Fragment、ViewPager、NotificationCompat等组件。V7库则针对Android 2.1及以上系统细分出多个模块,其中appcompat库让低版本实现Holo风格界面,而RecyclerView、CardView、Palette等库则提供了更现代的UI组件和功能。此外,还介绍了用于解决方法数超限的Multidex库、针对电视设备的v17 Leanback库,以及支持百分比布局的Percent库等。 对于开发者而言,这篇文章像一份清晰的地图,明确了在不同API Level需求下应该选择哪个支持库,以及每个库的核心能力,帮助解决碎片化兼容难题。

IT 2016-03-22 22:20:57 / 累计浏览 1,400

Android APP内存优化之图片优化

这篇讲的是作者在开发一款小学教育APP时,面对高分辨率设备上图片内存占用过大的实际挑战。在2K屏(2048×1536)上,单张背景图就能消耗12MB内存,频繁切换页面导致内存飙升至百兆级别。文章聚焦于这一痛点,分享了几项针对性的图片内存优化实践。 作者首先发现一个容易被忽视的细节:为Button设置selector背景会同时加载正常与按下两张图片,导致内存占用翻倍。解决方案是通过监听触摸事件动态切换背景,或使用setColorFilter实现反选效果,既节省内存也减小APK体积。其次,针对绘制大背景图时的界面卡顿问题,作者提出将背景绘制任务移至非UI线程,通过自定义的RootSurfaceView在SurfaceFlinger中完成渲染,从而避免阻塞主线程,提升了APP的流畅度。 这些方法均源于实际项目中的摸索,虽未深入底层原理,但提供了清晰、可落地的优化思路,特别适合处理图片密集型应用的内存与性能平衡问题。

IT 2016-03-22 22:16:22 / 累计浏览 1,560

Android性能测试工具列表

这篇文章系统梳理了Android开发中从启动、内存到帧率检测的各类性能工具。它不只罗列名称,而是解释了每个工具的核心用途和适用场景。 比如,通过adb命令行可以精确测量应用冷启动时间,其中“thisTime”仅反映当前Activity启动耗时,而“totalTime”则包含从搜索到启动的整个过程。对于内存问题,工具各有侧重:讯飞的iTest和Android Studio内置的内存监控能实时观察内存状态,识别泄漏与抖动;而LeakCanary则需集成到代码中,通过触发GC来主动捕获内存泄漏的详细堆栈。 文章还提及了腾讯的GT、网易的Emmagee等移动端一体化测试平台,以及如何利用Android 5.0以上系统原生的开发者选项进行性能剖析。最后,推荐了多个专注于Android性能优化的专业博客和Google官方的最佳实践指南,为读者提供了深入学习的方向。 这篇清单为开发者提供了一个从粗粒度监控到深度诊断的工具选择地图,帮助大家根据测试阶段和具体问题,找到最合适的“武器”。