Android开发技术周报 Issue#109

十二月 12, 2016 0 条评论 AndroidDevWeekly

新闻

  1. 官宣|谷歌开发者中文博客正式发布

  2. 官宣|Google Developers中国网站发布!

  3. Google Pixel的积极意义:加快推动Android厂商部署Nougat

  4. 谷歌推出Android 7.1.1 增加对"图像键盘"的支持

教程

  1. 使用 Unit Test 高效地玩转 RxJava 的操作符

    RxJava 博大精深,想要入门和进阶,操作符是一个切入点。 所以,我们希望寻找一种可以把操作符写得比较爽,同时可以快速验证输入输出是否准确的玩法。思路有以下两点:1.使用 UT 来对每一个操作符进行实现,如此一来可以脱离 Android 平台的依赖,专注于操作符本身。2.对于每一种操作符,使用 RX Marbles ,或者 RxJava 官方的弹珠图(marble diagrams)进行实现。

  2. MultiDex工作原理分析和优化方案

    动态加载技术(插件化)系列已经坑了有一段时间了,不过UP主我并没有放弃治疗哈,相信在不就的未来就可以看到“系统Api Hook模式”和插件化框架Frontia的更新了。今天要讲的是动态加载技术的亲戚 —— MultiDex。他们的核心原理之一都是dex文件的加载。

  3. Qzone视频下载如何做到多快好省?

    在Android手机上播放在线视频,最简单的方式就是实例化一个MediaPlayer, 将视频的URL通过setDataSource()设置给播放器,之后调用prepareAsync()和start()遍可以开始播放视频。这种方式非常简单,但其中最大的问题就是整个过程中的数据流完全由MediaPlayer控制,我们无法控制下载和播放的过程,也就导致我们没有办法提高成功率,优化用户体验。因此,Android侧的视频下载一般采用本地代理的方案实现。

  4. 理解Android ANR的处理过程

    无论是四大组件或者进程等只要发生ANR,最终都会调用AMS.appNotResponding()方法,下面从这个方法说起。当发生ANR时, 会按顺序依次执行:1.输出ANR Reason信息;2.收集并输出重要进程列表中的各个线程的traces信息,该方法较耗时; 【见小节2】;3.输出当前各个进程的CPU使用情况以及CPU负载情况;4.将traces文件和 CPU使用情况信息保存到dropbox,即data/system/dropbox目录;5.根据进程类型,来决定直接后台杀掉,还是弹框告知用户.

  5. Native进程之Trace原理

    当发生ANR(Application Not Response,对于Java进程可通过kill -3向目标进程发送信号SIGNAL_QUIT, 输出相应的traces信息保存到目录/data/anr/traces.txt;而对于Native进程可通过 debuggerd输出traces信息。可通过一条命令来获取指定Native进程的traces信息,例如输出pid=17529进程信息:adb shell debuggerd -b 17529 //可指定进程pid

  6. ART虚拟机之Trace原理

    Android 6.0系统采用的art虚拟机,所有的Java进程都运行在art之上,当应用发生ANR(Application Not Response,其中最终的一个环节便是向目标进程发送信号SIGNAL_QUIT, 传统的linux则是终止程序并输出core;而对于Android进程来说当收到SIGQUIT时,Java层面的进程都是跑在虚拟机之上的,ART虚拟机会捕获该信号,并输出相应的traces信息保存到目录/data/anr/traces.txt。

  7. 常见性能优化策略的总结

    之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次等。

  8. 玩转AppBarLayout

    AppBarLayout是一个垂直的LinearLayout,实现了Material Design中app bar的scrolling gestures特性。AppBarLayout的子View应该声明想要具有的“滚动行为”,这可以通过layout_scrollFlags属性或是setScrollFlags()方法来指定。AppBarLayout只有作为CoordinatorLayout的直接子View时才能正常工作,为了让AppBarLayout能够知道何时滚动其子View,我们还应该在CoordinatorLayout布局中提供一个可滚动View,我们称之为scrolling view。scrolling view和AppBarLayout之间的关联,通过将scrolling view的Behavior设为AppBarLayout.ScrollingViewBehavior来建立。

  9. 彻底搞懂CoordinatorLayout

    首先我们先来看看CoordinatorLayout究竟是个什么东东,它究竟是用来做什么的。官方文档对CoordinatorLayout是这样描述的:CoordinatorLayout是一个“加强版”FrameLayout,它主要有两个用途:1.用作应用的顶层布局管理器,也就是作为用户界面中所有UI控件的容器;2.用作相互之间具有特定交互行为的UI控件的容器;通过为CoordinatorLayout的子View指定Behavior,就可以实现它们之间的交互行为。 Behavior可以用来实现一系列的交互行为和布局变化,比如说侧滑菜单、可滑动删除的UI元素,以及跟随着其他UI控件移动的按钮等。

  10. Redex初探与Interdex:Andorid冷启动优化

    早在去年10月份,facebook就发布了介绍redex的文章,这个据说可以直接对apk做处理,既提高启动性能,又可减少安装包的利器让安卓开发者们都心动不已。直到今年4月,redex终于开源了,我们也第一时间对redex做了研究(有观众可能要说我骗人,这都11月了怎么还第一时间呢?好把这个总结是拖了很久才写),虽然由于坑多,最终没有接入到项目构建中,但受Interdex启发,在应用冷启动速度优化方面有了新的收获。

开源库 & App

  1. tab-digit

    A Flip Clock Libray

  2. FolioReader-Android

    A Java ePub reader and parser framework for Android

  3. gifencoder

    A pure Java library implementing the GIF89a specification. Suitable for use on Android.

  4. WaveLoading

    A wave-like loading drawable

  5. RxDownload

    基于RxJava和Retrofit打造的下载工具, 支持多线程下载和断点续传, 智能判断是否支持断点续传等功能

  6. OkLog

    Network logging interceptor for OkHttp. Logs an URL link with encoded network call data for every OkHttp call.

  7. CircleAlarmTimerView

    圆形进度条

  8. MyDiary

    In the Movie "-your name.-" (君の名は。, 你的名字) , "My Diary" of android version is

  9. CaptchaImageView

    可以生成验证码图片的 ImageView

工具

  1. ApkChannelBuilder

    一个 Mac App,用于 Apk 多渠道打包

  2. AndroidIconAnimator

    Android vector icon animation tool

活动

  1. Google Developer Day China 2016

    今年,Google 开发者大会将于12月8日和12月14日分别在北京和上海举办。不能去现场的可以看直播,直播地址:http://www.google.cn/events/developerday2016/livestream/

版权声明

欢迎自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 4.0

脉脉不得语
ZhengZhou Website
{Developer=菜鸟Android程序猿; Blog=http://inferjay.com; Github=http://github.com/inferjay; Organizer=GDG Zhengzhou; WebSite=http://www.androiddevtools.cn}