Android 开发周报:Android 相机开发、内存泄漏总结

  • 郭亮

2016 年 2 月 2 日

话题:移动Android语言 & 开发架构

新闻

  1. 《在 Google 看来应用商店都将消亡,而搜索永存》:智能手机用户每天都要和各种各样的 App 打交道,当然每天也要下载一定数量的 App。而目前来说,要下载 App,iOS 用户需要去 App Store,而 Android 用户则需要使用 Google Play 或是国内的应用商店。这似乎已经成为了理所当然的一件事。然而,根据国外媒体的报道,Google 目前正在测试一种新的下载 App 的方法,在未来,Android 用户也许不用再使用 Google Play 就可以直接下载 App 了。
  2. 《每 20 部 Android 手机就有 1 部被 root》:国外的研究人员研究结果表明:仅有 10% 的 Android 设备拥有预装“输入密码”设备加密的功能,这种情况会导致许多手机丢失或被偷之后陷入数据泄露的威胁境地。另外,每 3 部 Android 智能手机就有 1 部没有使用“输入密码”锁屏功能,这就让攻击者更容易访问设备了。而在 iPhone 中,仅有 5% 的用户没有启用这项功能。让情况变得更加糟糕的是,每 20 部 Android 手机中就有 1 部被 root,而 iPhone 的越狱比例只有 0.4%。

教程

  1. 《Android 相机开发那些坑》:Android 系统提供了两种使用手机相机资源实现拍摄功能的方法,一种是直接通过 Intent 调用系统相机组件,这种方法快速方便,适用于直接获得照片的场景,如上传相册,微博、朋友圈发照片等。另一种是使用相机 API 来定制自定义相机,这种方法适用于需要定制相机界面或者开发特殊相机功能的场景,如需要对照片做裁剪、滤镜处理,添加贴纸,表情,地点标签等。这篇文章总结了 Android 相机开发的相关知识、流程,以及容易遇到的坑,希望能帮助今后可能会接触 Android 相机开发的朋友快速上手,节省时间,少走弯路。
  2. 《Android Studio2.0 预览版之 Android 模拟器》:新 Android 模拟器的早期预览版现在可以试用了。作为 Android Studio 2.0 的一部分,除了用于测试的物理 Android 硬件外,最新版本的 Android 模拟器可帮助你针对各种屏幕尺寸和配置测试你的应用。此外,使用官方版 Android 模拟器可以让你使用最新版本的 Android 进行测试。在此基础上,新 Android 模拟器的两大优势包括:速度和性能、易用性和强大的用户界面。
  3. 《指定 App 是否位于前台判断》:有时候我们需要通过判断 App 是否运行在前台而进行一些 UI 处理。本文提供一个判断 App 是否处于前台的工具类, 拥有多达 5 种判断方法, 最后一种方法堪称 Android 黑科技, 既可以突破 Android5.0 以上的权限封锁, 获取任意前台 App 的包名, 又不需要权限。
  4. 《Android 内存泄漏总结》:内存管理的目的就是让我们在开发中怎么有效的避免应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。作者从 Java 内存泄漏的基础知识开始,并通过具体例子说明了 Android 引起内存泄漏的各种原因,以及如何利用工具分析了应用内存泄漏。
  5. 《Android 应用安全开发之源码安全》:Android Apk 很容易通过逆向工程进行反编译,从而是其代码完全暴露给攻击者,使 Apk 面临破解,软件逻辑修改,插入恶意代码,替换广告商 ID 等风险。本文从混淆保护、二次打包防护、SO 保护、资源文件保护、反调试技术、应用加固技术几方面介绍了如何保护 Apk。文中提到的技术非常实用,推荐大家大胆实践。
  6. 《Android 子线程真的不能更新 UI 吗?》:当一个程序第一次启动的时候,Android 会同时启动一个对应的主线程,这个主线程就是 UI 线程,也就是 ActivityThread。UI 线程主要负责处理与 UI 相关的事件,如用户的按键点击、用户触摸屏幕以及屏幕绘图等。系统不会为每个组件单独创建一个线程,在同一个进程里的 UI 组件都会在 UI 线程里实例化,系统对每一个组件的调用都从 UI 线程分发出去。所以,响应系统回调的方法永远都是在 UI 线程里运行。那么子线程真的不能更新 UI 吗?阅读文章,看看作者是如何回答该问题的。
  7. 《APK 瘦身实践》:Apk 瘦身应该是每一位 Android 工程师都会进行的一项工作。比如会开启 minifyEnabled、开启 shrinkResources、去除不相关的大型库、去除没有使用到的图片和代码。但即使这样,往往不能达到老板们的要求,所以我们需要进行深度的瘦身。本文介绍了几种减小 Apk 大小的技巧,相信对大家会有所帮助。
  8. 《Android M Launcher3 主流程源码浅析》:有些人可能觉得 Launcher 很高端,其实 Launcher 的实质也就是一个普通应用,它只是比普通应用多配置了 Category 的 android:name=“android.intent.category.HOME”属性而已。当 Android 开机启动成功以后框架层会尝试启动包含上面属性配置的 Activity,这样被启动的那个 Activity 就成了桌面。当我们按下设备的 Home 键时也会触发包含该属性的 Activity。只不过当系统中只存在一个包含该属性的应用时,无论开机还是 Home 键触发都只会自动启动默认的;当存在多个时无论哪种触发都会弹出选择框进行选择设置。本文是一篇介绍 Launcher3 源码的文章,简单的介绍了 Launcher3 的加载流程。

开源项目

  1. uCrop:uCrop 是一款漂亮又实用的图片裁剪库。
  2. SmoothCheckBox:这是一个自定义的 CheckBox,提供了动画支持,并且颜色、边框都可以配置,集成也很方便。SmoothCheckBox 比系统自带的 CheckBox 漂亮很多。
  3. blockcanary:BlockCanary 是一个 Android 平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复。
  4. SwipeStack:SwipeStack 实现了卡片堆积效果,支持手势滑动移除功能,效果很赞。

工具

  1. Androl4b:专为安卓测试、安全研究准备的一个虚拟机系统,里面集成了一系列 Android 应用程序评估测试所需的工具,可用于逆向工程和恶意软件分析。

感谢徐川对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

移动Android语言 & 开发架构