🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
##新闻 1. [Android 7.0发布时间曝光 预计今年夏季推出](http://tech.sina.com.cn/t/2016-03-13/doc-ifxqhmvc2381506.shtml) 最近在手机操作系统方面的焦点自然就是iOS9.3正式版系统将与本月21日正式推送,诸多的新功能的加入以及修善多种致命BUG让人越发是期待不已,而另一边安卓阵营也是丝毫没有休着,因为Android 7.0也接连曝光了。 ##教程 1. [App架构之组件化理解](http://wangxinghe.me/blog/2016-03-20/architecture-componentization/) 项目发展到一定阶段,随着需求的增加以及需求的频繁变更,项目会越来越大,耦合会越来越多,开发效率也会降低,这个时候需要做的就是进行模块拆分,官方的说法就是组件化。 2. [这可能是目前最详细的安卓task, launchMode, intent flag测试分析与总结了](http://blog.piasy.com/2016/03/19/Android-Task-And-Back-Stack/) task是一个从用户角度出发的概念,它是一些activity的组合,它们组合起来是为了让用户完成某一件工作(或者说操作)。task内的activity们以栈的形式组织起来,也就是back stack了。栈内的activity不会重新排序,只能push或者pop。栈内的activity可以来自不同的app,因此可以是运行在不同的进程,但是它们都属于同一个task内。 3. [android:process 的坑,你懂吗?](http://www.rogerblog.cn/2016/03/17/android-proess/) 许多知识知其然而不知其所以然,这也许就是大神与菜鸟的区别吧。最近排查问题时发现一个问题: 一个在 Application 中启动的定时任务在运行时会被调用多次,诡异的很,最后发现是一个前人留下的坑,原因就是对 android:process 不知其所以然造成的。 4. [你应该知道的那些Android小经验](http://t.cn/RGe7SEb) 做Android久了,就会踩很多坑,被坑的多了就有经验了,闲暇之余整理了部分,现挑选一些重要或者偏门的“小”经验做个记录。 5. [Roboletric探索之路,从抗拒到依赖](http://iceanson.github.io/Robolectric-%E6%8E%A2%E7%B4%A2%E4%B9%8B%E8%B7%AF) (By iceAnson) 大势所趋,bug量的增多不得不让我们提高代码的质量,不是我们完不成功能,只是我们验证功能的成本实在太高,随着工程的复杂度的增加,run一次模拟器或者真机,在window上的花费至少是一分钟以上,甚至三四分钟,所以有些人偷懒,包括我,有时候把那些看上去“没有问题的代码”提交到了主干上,随之产生了bug,然后进入修复bug-》run-》修复bug->run;花费了更多的时间和资源; 6. [Android 内存泄漏案例和解析](https://drakeet.me/android-leaks) Android 编程所使用的 Java 是一门使用垃圾收集器(GC, garbage collection)来自动管理内存的语言,它使得我们不再需要手动调用代码来进行内存回收。那么它是如何判断的呢?简单说,如果一个对象,从它的根节点开始不可达的话,那么这个对象就是没有引用的了,是会被垃圾收集器回收的,其中,所谓的 “根节点” 往往是一个线程,比如主线程。 7. [Android APP 快速 Pad 化实现](http://t.cn/RGrdQGJ) 如何能在最快的时间内,实现一个最新版本 Android app 的 pad 化呢?从拿到一个大型手机 app 代码开始开发到第一个其全新 pad 版本的发布,我们用了不到3个月时间给出了一份满意的答案。采用最新版本手机 APP(之后称为 MyApp)代码,实现其 Pad 化,为平板和大屏手机用户提供更好的体验。为实现 MyApp 的 Pad 化工作,需要我们首先来了解一下 MyApp 项目经典页面的构成以及 Pad 化后的页面结构的变化。 8. [Butter Knife 源码解析](http://t.cn/RGgLjwY) Java 5带有Annotation Processing Tool(APT)。它能够提供一个编译时的注解处理,并且能够产生新的代码与文件,同时能够让java编译器将生成的代码和原来的代码一起编译!与之配套的还有Mirror API,它提供在编译时对程序结构的静态、只读的分析。这个功能很强大,但是处理起来略显麻烦。Java 6开始将这个功能整合进编译器中,你只要继承AbstractProcessor,并在javac中通过参数-processor指定注解处理就好了。 9. [RxJava 与 Retrofit 结合的最佳实践](http://gank.io/post/56e80c2c677659311bed9841) RxJava和Retrofit也火了一段时间了,不过最近一直在学习ReactNative和Node相关的姿势,一直没有时间研究这些新东西,最近有个项目准备写,打算先用Android写一个Demo出来,却发现Android的世界发生了天翻地覆的变化,EventBus和OKHttp啥的都不见了,RxJava和Retrofit是什么鬼? 10. [Java 8 特性 – 终极手册](http://ifeve.com/java-8-features-tutorial/) 毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器、类库、开发工具和JVM(Java虚拟机)。在这篇教程中我们将会学习这些新特性,并通过真实例子演示说明它们适用的场景。 11. [不要写死!天猫App的动态化配置中心实践](http://t.cn/RGBw2VT) 最初移动App就是一个老老实实的App,一切都硬编码在客户端,只有业务数据是从API而来。渐渐的就会发现,这里的Tab文案需要动态调整,那里的文本颜色需要个性定制。于是我们就在数据接口里加上一些信息来控制客户端逻辑。当动态调整发挥作用,我们就发现这玩意儿简直太棒了,客户端逻辑居然也不需要版本依赖了!于是更多的逻辑开始未雨绸缪,开始在各自数据接口里预先埋下控制信息。 12. [Android Bound Service攻击](http://drops.wooyun.org/mobile/13676) 去年12月,【1】 讲述了针对android bound service的攻击方法,给出了从apk包中恢复AIDL文件的工具,利用AIDL便可以编写攻击Bound Service的Client。拜这篇文章所赐,笔者也在实际测试工作中发现了类似漏洞,其中的过程却有些曲折。作为白帽子,通常情况下很难直接得到或者恢复AIDL文件,这决定了Bound Service的易守难攻,因此需要更加系统地掌握Bound Sercive的测试方法,并辅以耐心和一定的运气,才能发现类似的漏洞。 13. [Retrofit 2.0 + OkHttp 3.0 配置](https://drakeet.me/retrofit-2-0-okhttp-3-0-config) Retrofit 和 OkHttp 都是伟大的 Square 公司开源的伟大项目。我从 2014 年便在同事 ionull 的推荐带领下,使用这个网络库组合以及 RxJava,真是极大改善 Android 开发体验的好东西。前段时间也是从 Retrofit 1.9 升级到 2.0 beta 4 版本,从 OkHttp 2.+ 版本升级到 3.0.1 版本。 14. [JVM内幕:Java虚拟机详解](http://t.cn/RGBArdo) 线程,这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。 15. [从零开始的Android新项目2 - Gradle篇](http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p2/) 相信大家的项目用上gradle都已经很久了,但用得如何呢?这里分享一下我的gradle脚本,大部分都是去年6月左右就开始用上的,有一部分比如签名的安全保存则是最近才自己动手,做了令自己觉得还不错的方案。 16. [从零开始的Android新项目1 - 架构搭建篇](http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p1/) domain为纯领域模型,是Java library,包含了use case(Interactor)、DO、repository接口等domain package,目标是在任何Java语言的平台上都能直接使用,所以必须是平台无关,对平台没有任何依赖,能使用Java的方法(JUnit + Mockito)来直接进行测试。 17. [Kotlin 语言高级安卓开发入门](https://realm.io/cn/news/oredev-jake-wharton-kotlin-advancing-android-dev/) 过去一年,使用 Kotlin 来为安卓开发的人越来越多。即使那些现在还没有使用这个语言的开发者,也会对这个语言的精髓产生共鸣,它给现在 Java 开发增加了简单并且强大的范式。Jake Wharton 在他的 Øredev 的讨论中,提到了 Kotlin 是如何通过提升安卓开发的语言特性和设计模式来解决这些严重的问题,通过这些方法你可以清除那些无用的 API 还有无效代码。充分利用扩展特性来解决你的开发中的模板性代码的问题! 18. [依赖注入框架性能对比](http://blog.nimbledroid.com/2016/03/07/performance-of-dependency-injection-libraries-zh.html) 依赖注入(DI)技术在安卓开发领域已经非常流行了。DI可以减少重复代码的编写,更便于调试和测试,使得开发出优秀的APP更加简单。尽管各种DI框架看着都非常强大,但也需要非常注意它们对APP性能带来的开销。本文中我们对比了三个最流行的DI框架,来帮助开发者了解它们各自的优劣。 19. [通过Loader延长Presenter生命周期](http://blog.chengdazhi.com/index.php/131) (By Dominic) MVP架构背后的核心思想就是将Activity/Fragment变成一个单纯的View,负责展示数据并将各种事件分发给中间人,也就是Presenter。Presenter会处理每一个事件,从Model层获取或上传数据,并将获得的数据进行处理并让View层展示。Presenter与View(这里是Activity/Fragment)的通信,是通过Activity/Fragment所继承的View接口来间接完成的。 20. [Android设置中“强行停止”详解](http://www.rogerblog.cn/2016/03/05/sourcecode-about-broadcast-receiver-stopstate/) 从 Android 3.1 开始,系统为所有的广播都默认添加了FLAG*EXCLUDE*STOPPED*PACKAGES 标志。所有处于停止状态的应用将无法接受到该标志的广播。注意,只有两种情况下应用才会处于停止状态:1.应用安装后未运行 2.应用被手动(设置-应用-强制停止)或者其他应用强制停止了,如果需要启动处于停止状态的应用,则只要为Intent添加 FLAG*INCLUDE*STOPPED*PACKAGES 标记即可。 ##开源库&项目 1. [Ahbottomnavigation](https://github.com/aurelhubert/ahbottomnavigation) 最新 Material Design 设计规范中 Bottom Navigation 的第三方实现 2. [BottomBar](https://github.com/roughike/BottomBar) 最新 Material Design 设计规范中 Bottom Navigation 的第三方实现 3. [SpringHeader](https://github.com/loopeer/SpringHeader) 使用 CoordinatorLayout 实现的弹簧效应的 Header View 4. [IndexRecyclerView](https://github.com/jiang111/IndexRecyclerView) 一个通过RecyclerView实现的联系人 5. [Passwordview](https://github.com/lisawray/passwordview) Material Design 的密码输入框控件 6. [Emoji](https://github.com/vanniktech/Emoji) 一个可以让你很方便在应用中集成 Emoji 表情的库 7. [awesome-android-tips](https://github.com/jiang111/awesome-android-tips) 各种开发中实用的 Tips 8. [react-native-image-picker](https://github.com/marcshilling/react-native-image-picker) React Native 的图片选择控件 9. [awesome](https://github.com/sindresorhus/awesome) 一个各种 awesome 库的索引库 10. [ExpandablePager](https://github.com/Telenav/ExpandablePager)  可以在 expanded 和 collapsed 两个状态之间切换的 ViewPager,并且可以 slide vertically 11. [NodeFlow](https://github.com/Telenav/NodeFlow) 可以让你很容易实现分层可视化内容的库 12. [ReLinker](https://github.com/KeepSafe/ReLinker) 一个可以替换 JDK 里的 `System.loadLibrary` 的库 13. [PoiShuhui-Kotlin](https://github.com/wuapnjie/PoiShuhui-Kotlin) 一个用Kotlin写的简单漫画APP ##工具 1. [API Blueprint](http://www.jianshu.com/p/d39c3553e25a) 是一套基于 markdown 的 API 描述语言规范 2. [ProperDroid](https://github.com/JcMinarro/ProperDroid) 一个 Gradle 插件,可以让你用一种简单的方式给你的 Projece 配置 variant 3. [GifHub](https://github.com/DrewML/GifHub) 一个往 GitHub 评论里边插入 Gif 动画的 Chrome 插件 ##视频 1. [Look Up](http://video.sina.com.cn/p/tech/t/v/2014-06-05/172863999249.html) 英国艺术工作者盖瑞科德今年4月在网络上载了一部题为《抬起头来》(Look Up)的自创短片,从中呼吁低头族关掉手机,放下生活中的干扰。截至目前为止,这部短片已经累积高达2千万的浏览量。