脉脉不得语的技术博客

心无所恃,随遇而安

Android开发技术周报 Issue#16

| Comments

教程

  1. Android性能优化之过渡绘制(一)

    首先将讲解一下GPU过渡绘制,也是开发者最直接接触的部分吧,这个内容将分为两个部分来将讲,第一部分初步讲解一下gpu过渡绘制的原理,和一些优化建议,第二部分将用实际例子来讲解优化GPU过渡绘制的一般步骤。

  2. Android性能优化之过渡绘制(二)

    这篇文章从实战的角度,讲解了一个过渡绘制的优化过程。当然这里用到的只是很少的一部分,毕竟每个应用差别很大,优化方式也各不一样。所以这篇文章仅供参考,想把这块做好还是要下功夫的。不过令我比较欣慰的是,在公司内推行这个优化之后,我们Flyme内部的自带应用已经做得很好了,当然还是有不少界面有优化的空间,但总体还是比较满意的。

  3. Android Studio系列教程六–Gradle多渠道打包

    由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了

Android开发技术周报 Issue#15

| Comments

教程

  1. Android Studio系列教程五–Gradle命令详解与导入第三方包

    Android Studio + Gradle的组合用起来非常方便,很多第三方开源项目也早都迁移到了Studio,为此今天就来介绍下查看、编译并导入第三方开源项目的方法。

  2. 打造极致Material Design动画风格Button

    在我的文章中曾经有两篇关于Material Design风格的按钮实现。在第一章中只是简单的实现了动画的波纹效果,而在第二篇中对此进行了一定的扩充与优化,最后实现可以自动移动到中心位置的动画;虽然两者都可用,但是在我的使用中却发现了一定的问题,如有些位置点击会出现波纹速度的运算上的问题。

  3. Android开发-API指南-AIDL

    Android 接口定义语言 AIDL(Android Interface Definition Language)与其他已有的 IDL 很类似。 客户端和服务端可以通过由它定义的编程接口来达成共识,以便通过进程间通讯(IPC)完成相互通讯。 在 Android 系统中,通常一个进程不允许直接访问另一个进程的内存。 因此为了能够实现对话,进程需要把对象分解为操作系统可以识别的原生数据,在跨越进程边界后再组装起来。 实现组装的代码非常枯燥无趣,因此 Android 通过 AIDL 可有助于完成这一过程。

  4. Android Proguard 详解

    Java代码是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard是一个混淆代码的开源项目。它的主要作用就是混淆,当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。官网网址是:http://proguard.sourceforge.net/

Android开发周报 Issue#14

| Comments

新闻

  1. 慎用Java日期格式化

    这条留言实际指向了Twitter上的一个帖子,这个帖子提醒大家,如果使用了YYYY的格式符来格式化日期,那么就有可能用错格式了。Reddit的一位读者解释说,Twitter由于误用格式符,把当天的日期变成了2015年12月的某天。

教程

  1. ART运行时垃圾收集机制简要介绍和学习计划

    为了学习ART运行时的垃圾收集机制,我们先把Dalvik虚拟机的垃圾收集机制研究了一遍。这是因为两者都使用到了Mark-Sweep算法,因此它们在概念上有很多一致的地方。然而在实现上,Dalvik虚拟机的垃圾收集机制要简单一些。这样我们就可以先从简单的Dalvik虚拟机垃圾收集机制入手,然后再逐步深入地学习复杂的ART运行时垃圾收集机制。

  2. Material Design in Action — 猿题库

    猿题库很早之前就发布了 Android 版本的客户端,但猿题库的联合创始人,郭常圳 先生,并不认同 Android Design (或者现在的 Material Design),而且认为应用程序的设计规范,应当由开发商来规定。然而当我试用猿题库的时候发现,这个应用对其进行 Material Design 的适配,其实并不困难。因此就有了对其进行重新设计的念头。

  3. 正确使用Android性能分析工具——TraceView

    最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方。因为之前不会正确使用TraceView这个工具,主要是看不懂TraceView界面下方数据指标的值代表什么意思…以前我用StopWatch类来分析性能,现在觉得弱爆了…不过有些地方StopWatch工具类还是很简单好用的~

Android开发周报 Issue#13

| Comments

新闻

  1. Oracle开始从Java运行时中移除JAR包

    早在2012年8月,在Java平台首席架构师Mark Reinhold宣布模块化项目Jigsaw之后不久,JEP 162这一题为“准备模块化”的提案就指出,在Jigsaw项目中为模块化系统开发的代码不会集成到JDK 8中。那次延期直接将模块化支持推迟到JDK 9,最早也得到2016年。

  2. android5.0让位,Android 6.0曝光这是神马情况?

     Android 5.0刚和我们见面没多久,下一代操作系统Android 6.0就曝光了。外媒报道称,谷歌另一个开发小组已经着手进行一款代号为“M”的系统的研发工作,而这个“M”很有可能就是Android 6.0的代号。据猜测,Android 6.0最主要的变化将会是优化车载表现,可直接安装在汽车当中,这样用户无需智能手机即可直接控制汽车。

教程

  1. 将Eclipse代码导入到AndroidStudio的两种方式

    说到使用AndroidStudio,除了新建的项目,我们都会面临的问题是原先Eclipse的代码该怎么导入到AndroidStudio中使用。Google为了让我们更加方便的使用AndroidStudio,提供了两种导入Eclipse代码的方式:一种兼容Eclipse,一种是全新的Android Gradle Project.

  2. Java 注解指导手册 – 终极向导

    在这篇文章中我们将阐述什么是Java注解,它们如何工作,怎么使用它们。我们将揭开Java注解的面纱,包括内建注解或称元注解,还将讨论Java8中与之相关的的新特性。最后,我们将实现自定义的注解,编写一个使用注解的处理程序(消费器),它通过java反射使用注解。

  3. 缓存、缓存算法和缓存框架简介

    我们都听过 cache,当你问他们是什么是缓存的时候,他们会给你一个完美的答案,可是他们不知道缓存是怎么构建的,或者没有告诉你应该采用什么标准去选择缓存框架。在这篇文章,我们会去讨论缓存,缓存算法,缓存框架以及哪个缓存框架会更好。

Android Studio 自动更新失败解决办法

| Comments

昨天在G+中看到Android Studio又有更新了就心血来潮想去更新体验一下,可是无论我怎么点Check Update却一直提示Connection failed. Please check your network connection and try again,开始以为是由于G*W在捣乱,但是打开VPN后还是无法更新,然后开始Google了一下找到了下面的解决办法。

image

Mac OSX

首先打开Finder在左边选择Application目录,在右边找到Android Studio.app,然后右击选择“显示包内容”如下图:

alt text

Android开发周报 Issue#12

| Comments

文章

  1. Dalvik虚拟机垃圾收集(GC)过程分析

    前面我们分析了Dalvivk虚拟机堆的创建过程,以及Java对象在堆上的分配过程。这些知识是理解Dalvik虚拟机垃圾收集过程的基础。垃圾收集是一个复杂的过程,它要将那些不再被引用的对象进行回收。一方面要求Dalvik虚拟机能够标记出哪些对象是不再被引用的。另一方面要求Dalvik虚拟机尽快地回收内存,避免应用程序长时间停顿。本文就将详细分析Dalvik虚拟机是如何解决上述问题完成垃圾收集过程的。

  2. 使用Android Studio查看Android Lollipop源码

    作为Google的亲儿子,Nexus手机系列所收到的待遇大家有目共睹.Android5.0出来之后,Nexus5第一时间就升级到了最新的系统.那么作为Google亲儿子的Android Studio同样备受Google的重视,我也是第一时间从Eclipse转投到了Android Studio的怀抱中,从最初的测试版本一路升级到现在的1.0正式版本(今天发布了1.0.2,果断已经升级了),关于Android Studio的好处我就不用说了…

  3. Facebook工程师是如何改进他们Android客户端的

    作为世界上最大的社交网络,Facebook的Android客户端面临着各种各样的使用环境(地理环境、Android设备以及移动网络等环境的差异)。也正是这个原因,为了检测自家Android客户端在发展中国家的性能表现,Android的产品经理、工程师在2013年的时候去了一趟非洲。当时我看到这个新闻的时候觉得有点怪异,后来看到他们这篇博客才有点理解他们这样做的原因了。

  4. 你的Android应用完全不需要那么多的权限

    Android系统的权限从用户的角度来看有时候的确有点让人摸不着头脑。有时候可能你只需要做一些简单的事情(对联系人的信息进行编辑),却申请了远超你应用所需的权限(比如访问所有联系人信息的权限)。

Android开发周报 Issue#11

| Comments

文章

  1. Google为何这样设计OnSharedPreferenceChangeListener

    之前使用OnSharedPreferenceChangeListener,遇到了点小问题,就是有些时候OnSharedPreferenceChangeListener没有被触发。最近花了点时间研究了一下,小做整理。本文将会介绍监听器不被触发的原因,解决方法,以及其中隐含的一些技术细节。

  2. 导入开源库到基于Android Studio构建的项目中

    前两天,谷歌发布了Android Studio 1.0的正式版,也有更多的人开始迁移到Android Studio进行开发。然而,网上很多的开源库,控件等还是以前的基于Eclipse进行开发,很多人不知道怎么导入到自己的基于Android Studio项目中来,微博上也有人私信我,让我来写写,正好今天回来的比较早,就写写吧。主要介绍一下常见的一些导包的场景。

  3. Android批量打包提速 - 1分钟900个市场不是梦

    使用Ant或者Gradle来给程序进行多渠道批量打包,通常都是在manifest文件中写入一个meta标签:<meta-data android:name="CHANNEL" android:value="xxx" /> meta的key值固定,通过循环改变meta中的value值来实现市场渠道的写入。Ant批量打包实现相对麻烦,以前写的时候多亏了谦虚的天下-《App自动化之使用Ant编译项目多渠道打包》 。如果没有这篇帖子,真不知道当时Ant要折腾多少回才能写好。

  4. 上传Android或Java库到Maven central repository

    主要介绍利用Sonatype将jar或aar提交到Maven的中央仓库。是不是希望将自己的jar或是aar传到maven官方库中,在The Central Repository中可以被其他人搜索使用呢,是的话,往下看吧。

Android开发周报 Issue#10

| Comments

文章

  1. Android Apk 拆分机制

    拆分机制比起使用 flavors,能让应用程序更有效地构建一些形式的多个apk。多 apk 只支持以下类型: 1. 屏幕密度 2.ABI.使用新的拆分机制,构建同一个应用程序的hdpi版本和mdpi版本,能够共享很多的任务 (如 javac,dx,proguard)。此外,它会被认为是一个单一的variant,并且同一个测试程序将会被用来测试每​​个多APK。

  2. 使用manifestPlaceholders

    在项目中我需要打包不同渠道的APK,需要在AndroidManifest中定义渠道名称,以便在java中调用。以前ant或gradle打包时动态改变渠道的思路是:正则AndroidManifest的特定字符然后替换.

  3. Property Anim详解

    本篇文章将对PropertyAnimation进行全面深入的探讨,本篇文章可以分为两大块,从第六部分可以作为分界点。前五部分着重讲解了PropertyAnim的动画值的计算过程,ValueAnimator与ObjectAnimator以及TimeInterpolation与TypeEvaluator之间的介绍和比较,这几点是比较重要的,从第六部分开始是通过源码的角度分析了整个动画计算以及内部的处理细节,以及引出了对JakeWharton大神的NineOldAndroids 开源库的分析,如果你觉得太多,可以分开来看,有理解不准确的地方,欢迎大家指正。

Android开发周报 Issue#9

| Comments

文章

  1. Dalvik虚拟机Java堆创建过程分析

    使用C/C++开发应用程序最令头痛的问题就是内存管理。慎不留神,要么内存泄漏,要么内存破坏。虚拟机要解决的问题之一就是帮助应用程序自动分配和释放内存。为了达到这个目的,虚拟机在启动的时候向操作系统申请一大块内存当作对象堆。之后当应用程序创建对象时,虚拟机就会在堆上分配合适的内存块。而当对象不再使用时,虚拟机就会将它占用的内存块归还给堆。Dalvik虚拟机也不例外,本文就分析它的Java堆创建过程。

  2. 为什么Android的图片质量会比iPhone的差?

    经常看到有人问:“安卓版微信发出去的图片怎么那么渣!比iPhone的差远了!”。不只是微信,很多应用安卓版的图片质量就是要比iPhone版逊色很多,这到底是怎么回事?

  3. [Material Design]使用Fackbook Rebound快速实现弹簧动画效果

    Rebound是Facebook推出的一款Android的物理和动画库,于2013年10月在Mobile@Scale大会上正式发布,旨在解决笨重、缓慢的传统移动网络界面。Rebound不是一款通用物理库,但其弹簧模型在应用程序中引入了现实世界的物理,易于集成,创建的动画能够让人感觉到非常自然,并且可以和Material Design的设计原则呼应,可用于滚动条、切换开关、呼叫等场景下。

  4. 使用curl来调试你的应用

    我们在客户端开发过程中总免不了和后端进行api对接,有时候需要对返回的数据格式进行调试,有时候每次运行客户端来发送请求,这个未免效率太低,这里就来介绍一个好用的工具–curl。