
追逐Android
掌握Android应用的开发,追逐Android的技术,探索Android中的奥秘。
无嘴小呆子
用代码书写这个世界
展开
-
使用Kotlin优雅的添加Fragment
综述在上面文章聊一聊Kotlin扩展函数run,with,let,also和apply的使用和区别中讲解Kotlin的几个扩展函数的使用和区别。那么在这篇文章中去自己定义一些扩展函数来更加优雅的去将添加Fragment到Activity中。回顾Fragment使用在使用Kotlin之前,首先回顾一下在Java中是如何添加一个Fragment到Activity当中的。Frag...原创 2018-03-24 18:47:59 · 14626 阅读 · 8 评论 -
聊一聊Kotlin扩展函数run,with,let,also和apply的使用和区别
综述和Java相比,在Kotlin中提供了不少新的特性。这次我们就来聊一聊Kotlin的一些通用的扩展函数run,with,let,also和apply。对于这五个扩展函数它们都存在于Kotlin的源码标准库当中,也就是在Standard.kt文件当中。它们都是适用于任何对象的通用扩展函数。但是对于run,with,let,also和apply这五个函数他们的用法及其相似,以至于我们无法确定去...原创 2018-03-16 01:02:43 · 11643 阅读 · 7 评论 -
Android稳定性测试工具Monkey的使用
Monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机(pseudo-random)的用户事件流,例如点击,触摸,手势等。我们能够使用Monkey工具来对我们所开发的应用进行压力测试。Monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。Monkey程序介绍 Monkey是Android自带的系统原创 2017-01-15 13:07:12 · 11699 阅读 · 2 评论 -
Android性能优化之内存泄漏
内存泄漏(memory leak)是指由于疏忽或错误造成程序未能释放已经不再使用的内存。那么在Android中,当一个对象持有Activity的引用,如果该对象不能被系统回收,那么当这个Activity不再使用时,这个Activity也不会被系统回收,那这么以来便出现了内存泄漏的情况。原创 2016-12-11 16:34:40 · 7181 阅读 · 3 评论 -
Retrofit2源码解读
Retrofit2的用法在Retrofit2.0使用详解这篇文章中已经详细介绍过了。那么在这就来看一下Retrofit2它是如何实现的。Retrofit2中它的内部网络请求是依赖于OKHttp,所以Retrofit2可以看做是对OKHttp的一次封装,那么下面就开看下Retrofit2是如何对OKHttp进行封装的。原创 2016-06-18 15:20:16 · 10400 阅读 · 0 评论 -
Android视图的绘制流程(下)——View的Layout与Draw过程
在上篇文章中Andtoid视图的绘制流程——View的测量对View的Measure过程进行了详细的说明。对于在View的绘制的整个过程中,在对View的大小进行测量以后,便开始确定View的位置并且将其绘制到屏幕上。也就是View的Layout与Draw过程。那么就来看一下是如何实现这两个过程的。View的Layout过程原创 2016-06-11 13:26:55 · 8099 阅读 · 1 评论 -
Android视图的绘制流程(上)——View的测量
View的绘制流程可以分为三大步,它们分别是measure,layout和draw过程。measure表示View的测量过程,用于测量View的宽度和高度;layout用于确定View在父容器的位置;draw则是负责将View绘制到屏幕中。下面主要来看一下View的Measure过程。原创 2016-06-10 22:34:32 · 3464 阅读 · 1 评论 -
Java注解在Android中使用
注解(Annotation)也被称为元数据(Metadata),是在Java SE 5中提供的一个新特性。Annotation可以用来修饰类,属性,方法。在Java中,除了使用系统内置的Annotation以外,用户还能够通过自定义Annotation来实现所需要的功能。下面就来看一下如何使用自定义的Annotation。原创 2016-06-04 21:40:41 · 5959 阅读 · 5 评论 -
Android官方MVP架构解读
对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的。而对于Android应用的开发中本身可视为一种MVC架构。通常在开发中将XML文件视为MVC中的View角色,而将Activity则视为MVC中的Controller角色。不过更多情况下在实际应用开发中Activity不能够完全充当Controller原创 2016-05-22 22:24:28 · 70318 阅读 · 25 评论 -
EventBus3.0源码解读
EventBus是我们在项目当中最常用的开源框架之一。对于EventBus的使用方法也是非常的简单。然而EventBus内部的实现原理也不是很复杂。在这里便针对EventBus3.0的源码进行一下详细的分析。对于EventBus的详细使用可以参考EventBus3.0使用详解这篇文章。原创 2016-05-21 15:43:21 · 12395 阅读 · 1 评论 -
Android中的事件分发机制(下)——View的事件处理
在上篇文章Android中的事件分发机制(上)——ViewGroup的事件分发中,对ViewGroup的事件分发进行了详细的分析。在文章的最后ViewGroup的dispatchTouchEvent方法调用dispatchTransformedTouchEvent方法成功将事件传递给ViewGroup的子View。并交由子View进行处理。那么现在就来分析一下子View接收到事件以后是如何处原创 2016-05-15 19:23:27 · 16268 阅读 · 0 评论 -
Android中的事件分发机制(上)——ViewGroup的事件分发
Android中的事件分发机制也就是View与ViewGroup的对事件的分发与处理。在ViewGroup的内部包含了许多View,而ViewGroup继承自View,所以ViewGroup本身也是一个View。对于事件可以通过ViewGroup下发到它的子View并交由子View进行处理,而ViewGroup本身也能够对事件做出处理。下面就来详细分析一下ViewGroup对时间的分发处理。原创 2016-05-13 13:31:43 · 12785 阅读 · 1 评论 -
ProGuard详解
综述 对于ProGuard工具想必我们都不陌生,它能够通过移除无用代码,使用简短无意义的名称来重命名类,字段和方法。从而能够达到压缩、优化和混淆代码的目的。最终我们会获取一个较小的apk文件,并且我们这个通过ProGuard处理的apk文件更难于进行逆向工程。ProGuard工作原理简介 ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize)...原创 2016-05-03 23:46:35 · 40513 阅读 · 13 评论 -
解决Retrofit文件下载进度显示问题
在Retrofit2.0使用详解这篇文章中详细介绍了retrofit的用法。并且在retrofit中我们可以通过ResponseBody进行对文件的下载。但是在retrofit中并没有为我们提供显示下载进度的接口。在项目中,若是用户下载一个文件,无法实时给用户显示下载进度,这样用户的体验也是非常差的。那么下面就介绍一下在retrofit用于文件的下载如何实时跟踪下载进度。原创 2016-04-19 12:40:21 · 25214 阅读 · 10 评论 -
Retrofit2.0使用详解
retrofit是由square公司开发的。square在github上发布了很多优秀的Android开源项目。例如:otto(事件总线),leakcanary(排查内存泄露),android-times-square(日历控件),dagger(依赖注入框架),picasso(异步加载图片),okhttp(网络请求)等等。原创 2016-04-03 01:09:50 · 69587 阅读 · 29 评论 -
AsyncTask使用以及源码分析
在Android中,我们需要进行一些耗时的操作,会将这个操作放在子线程中进行。在子线程操作完成以后我们可以通过Handler进行发送消息,通知UI进行一些更新操作(具体使用及其原理可以查看[Android的消息机制——Handler的工作过程](http://blog.youkuaiyun.com/ljd2038/article/details/50889754)这篇文章)。当然为了简化我们的操作原创 2016-03-19 16:38:42 · 4697 阅读 · 1 评论 -
Android的消息机制——Handler的工作过程
在Android系统中,出于对性能优化的考虑,对于Android的UI操作并不是线程安全的。也就是说若是有多个线程来操作UI组件,就会有可能导致线程安全问题。所以在Android中规定只能在UI线程中对UI进行操作。这个UI线程是在应用第一次启动时开启的,也称之为主线程(Main Thread),该线程专门用来操作UI组件,在这个UI线程中我们不能进行耗时操作,否则就会出现原创 2016-03-14 20:54:23 · 11253 阅读 · 15 评论 -
EventBus3.0使用详解
这里所介绍的EventBus指的是greenrobot的EventBus,它是一款针对Android的发布/订阅事件总线。它能够让我们很轻松的实现在Android的各个组件以及线程之间进行传递消息。并且将事件的发送者与接收者之间进行解耦。而且他还是轻量级的Android类库。对于EventBus3.0中相对于先前的版本中用法有所改变,那么下面我们就来看一下如何使用这个EventBus;原创 2016-03-12 16:50:08 · 15512 阅读 · 2 评论 -
Android的IPC机制(七)—— Socket的原理简析与使用
在前面的几篇文章中,我们介绍了许多在Android中有关进程间通信的方式,但都是在一个设备上进行的进程间通信,而这时候我们两个应用在不同的设备上的时候,在这个时候我们就不能通过前方介绍的那些方法来解决了。但是我们通过网络进行通信来处理这个问题。今天就来介绍一下Android中网络通信的其中一种方式——Socket。Socket翻译为中文为套接字,而现在套接字也成为了操作系统中的一部分。原创 2016-03-06 20:54:13 · 6036 阅读 · 6 评论 -
Android的IPC机制(六)—— BroadcastReceiver的使用
在Android的四大组件中除了ContentProvider能够用于进程间的通信外,还有一个也能够用于进程间的通信,那就是BroadcastReceiver。BroadcastReceiver翻译成中文为广播接收器,既然作为广播接收器,那么必然就有Broadcast。在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。原创 2016-02-29 18:00:37 · 5109 阅读 · 0 评论 -
Android的IPC机制(五)—— ContentProvider的使用
对于前面一些的ipc过程都是Service与客户端进行通信。那么在不同应用之间ipc可以采用哪些方式呢?首先我们会想到ContentProvider,因为我们平时获取手机上的联系人,图片等等都是通过ContentProvider得到的。ContentProvider是Android的四大组件之一。翻译成中文为内容提供者,也就是可以将自己的数据提供给别的应用进行使用。原创 2016-02-28 16:47:20 · 3890 阅读 · 4 评论 -
Android的IPC机制(四)—— Messenger的使用及源码分析
在前面几篇中我们详细的介绍了AIDL的使用及原理。在这里我们感觉到AIDL的在使用过程中还是比较复杂的,那么有没有一种简单的方法来实现进程间的通信呢?当然是有的,那就是利用Messenger。Messenger翻译为信使,从他的名字就可以看出这个Messenger就是作为传递消息用的。那么我们就来看一下这个Messenger到底是如何使用的,以及在它内部是如何实现的。原创 2016-02-25 18:22:18 · 3884 阅读 · 0 评论 -
Android的IPC机制(三)——Binder连接池
前两篇说到AIDL的使用方法,但是当我们的项目很大时,很多模块都需要用到Service,我们总不能为每一个模块都创建一个Service吧,这样一来我们的应用就会显得很笨重。那么有没有一种解决方案叫我们只需要创建一个Service,然后去管理AIDL呢?在任玉刚的《Android开发艺术探索》中给出了一个解决方案,那就是Binder连接池。在这里我们看一下他是怎么实现的。原创 2016-02-24 20:00:24 · 5766 阅读 · 4 评论 -
Android的IPC机制(二)——AIDL实现原理简析
上篇说到AIDL的使用方法,我们不能仅仅只是满足对AIDL的使用,那么对于AIDL到底是如何实现的呢?为什么我们只是创建一个AIDL文件,系统就会为我们自动生成一个Java文件,那么这个Java文件里面到底包含了哪些内容呢?我们今天就来研究一下。原创 2016-02-20 20:10:54 · 5499 阅读 · 1 评论 -
Android的IPC机制(一)——AIDL的使用
IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互。不同的操作系统都有他们自己的一套IPC机制。例如在Linux操作系统中可以通过管道、信号量、消息队列、内存共享、套接字等进行进程间通信。那么在Android系统中我们可以通过Binder来进行进程间的通信。当然除了Binder我们还可以使用Socket来进行进程间的通信。原创 2016-02-20 13:54:37 · 4859 阅读 · 3 评论