android
她说巷尾的樱花开了
这个作者很懒,什么都没留下…
展开
-
MINA框架源码分析(四)
总结篇:MINA的整个执行过程是:(1):在我们创建完Nio原创 2016-08-10 21:21:40 · 2690 阅读 · 1 评论 -
android-----View工作原理系列(三)
前面两篇博客我介绍了invalidate、postInvalidate、requestLayout的源码分析以及解释了从调用setContentView开始是怎么一步一步走到performTraversals来进行视图绘制的。这篇博客我将对performTraversals之后的measure、layout、draw三个过程通过伪代码的方式来个总结; 首先用一张图来直观的展示出V原创 2016-07-06 10:10:46 · 1277 阅读 · 0 评论 -
android-----View工作原理系列(二)
看过《Android开发艺术探索》View的绘制源码之后,里面在讲解绘制最开始执行的方法是ViewRootImpl里面的performTraversals,觉得有点费解,为什么直接就执行到这个方法呢?这中间一定也存在着执行到performTraversals的过程,本着想要了解清楚的想法,看了看源码,在此分享一下: 我们平常会在Activity的onCreate里面调用setCo原创 2016-07-05 18:37:52 · 2794 阅读 · 0 评论 -
android-----事件分发机制测试系列(五)
这篇是对事件分发机制的终极总结,包括前面测试中所用到的一些知识点,有什么不对的地方希望大家能够批评指正; 结论: (1):事件的传递方向是:Activity----->ViewGroup----->View,即隧道式分发; (2):ViewGroup的事件处理方法调用顺序是:dispatchTouchEvent----->onIntercept原创 2016-07-01 20:36:03 · 1542 阅读 · 0 评论 -
android-----在Activity启动时获得View宽高
我们都知道可以通过getMeasuredWidth、getMeasuredHeight以及getWidth、getHeight可以获得View的测量宽高以及最终宽高,但是两者必须是在onMeasure或者onLayout方法执行结束之后才能获取到值,否则获取到的只能是0,再加上View的measure过程和Activity的生命周期并不是同步的,并不能保证Activity在执行了onCreate、原创 2016-07-04 09:35:12 · 2906 阅读 · 0 评论 -
android-----ThreadLocal源码分析
今天在复习Handler消息处理机制原理的时候,发现自己对android的ThreadLocal部分理解还不是很到位,在此做个总结,之前我分析过java中的ThreadLocal源码,参见:java-----ThreadLocal源码分析,这篇我们分析的是android中的ThreadLocal源码,大家都知道解决多线程并发问题我们可以采用synchronized关键字来实现,他依托的是JVM的锁原创 2016-06-19 10:19:02 · 2240 阅读 · 2 评论 -
android-----IntentService源码分析
上一篇我们介绍了HandlerThread的用法,这一篇将从源码的角度来学习下IntentService的用法,其实IntentService是对HandlerThread的一种封装,又由于他本身是Service,所以很自然他也有Service的一些特点,比如他可以在后台使用,并且优先级较高,不容易被杀死,下面我们看看IntentService的源码; 首先查看他的类结构pu原创 2016-07-13 23:11:21 · 1227 阅读 · 0 评论 -
android-----IPC进程间通信之Messenger
Messenger是android为我们提供的可以在不同进程间传递Message的信使,他是对AIDL的封装,为此,我总结了他的几个特点: (1):哪里需要回送消息就需要在哪里创建一个Handler,因为使用Messenger实际处理消息的是Handler; (2):Messenger一次只能处理一个请求,因此不需要我们考虑线程同步的问题,原因很简单,因为服务端原创 2016-07-15 12:02:57 · 1235 阅读 · 0 评论 -
android-----View工作原理系列(一)
这几天开始了View工作原理的学习,当然最初肯定是从View的绘制过程开始的,至于其中的源码分析网上挺多的,我只是会在随后的博客中做些总结,并不会从代码层面进行分析,这篇博客我们主要涉及的是invalidate以及与之有关的postInvalidate,他两个是用于视图重绘的,同样我也不会从代码层面进行分析,首先会通过实例来进行验证,之后把源码层面的执行过程通过总结的方式呈现出来;原创 2016-07-04 21:42:00 · 3586 阅读 · 0 评论 -
android-----XUtils框架之HttpUtils源码分析
之前我们对Volley框架源码进行了分析,知道了他适用于频繁的网络请求,但是不太适合post较大数据以及文件的上传操作,在项目中为了弥补Volley的这个缺陷,使用了XUtils框架的HttpUtils实现了文件上传的操作,上一篇博客我们通过HttpUtils实现了照片上传的实例,见:android-----基于XUtils客户端以及服务器端实现,当然文件上传的方法类似于照片上传,只不过在传参的个原创 2016-06-18 16:59:58 · 7220 阅读 · 2 评论 -
android-----滑动冲突解决案例
之前的几篇博客,我测试了View事件分发机制中的一些知识点,我们理解事件分发机制的目的就是为了能够更好了知道View中事件的传递过程进而能够对于滑动冲突有针对性的解决措施,今天我们通过一个翻页实例来学习下滑动处理的方式之一-----外部拦截法; 因为要用到翻页,那么不可避免的要用到Scroller类,其实拿scrollBy和scrollTo也能做到翻页的效果,但不足是两者都是在瞬原创 2016-07-03 14:35:17 · 5542 阅读 · 0 评论 -
android-----XUtils框架之BitmapUtils加载照片实现
作为比较成熟的流行框架,XUtils中的BitmapUtils部分为我们加载照片提供了很大方便,他集成了LRUCache和DiskLruCache缓存机制,在很大程度上避免了我们在加载较多 照片时出现的OOM异常,这篇博客我们从使用的角度学习下BitmapUtils的用法,下一篇将从源码的角度带你真正了解BitmapUtils; 我们使用BitmapUtils实现一个照片墙的功能原创 2016-06-20 14:58:28 · 5501 阅读 · 3 评论 -
android-----关于通过AIDL注册监听之后无法解除监听的探索
我们在平常使用AIDL时可能会有这样的场景,客户端并不想一直查看服务端有没有有关我的消息,而是想让服务端在有消息的时候能够通知我,随后客户端再去服务端拿消息,这样相对来说比较节省资源,通常我们可以利用观察者模式将客户端注册到服务端,接着有消息的时候服务端相应的通知各个客户端就可以了,这种方式在客户端和服务端处于同一进程的时候使用是没有问题的,因为同一进程内部是可以直接传递对象的,并不会出现注册绑定原创 2016-07-17 13:41:27 · 4984 阅读 · 1 评论 -
MINA框架中的编码解码以及对粘包断包的处理
我们都知道MINA中是使用责任链的方式来实现将二进制字节流数据转换为java对象,或者将java对象转换为二进制字节流数据的,那么这个转换过程到底是怎么进行的呢?这就涉及到MINA中的编码与解码问题了; 我们先来看看解码过程: 当服务端读取客户端发送过来的消息时,会执行AbstractPollingIoProcessor里面的read方法,因为之前在我们对MIN原创 2016-08-14 19:02:06 · 6013 阅读 · 0 评论 -
Android-----借助MINA框架实现长连接、短连接以及断线重连
前面我们分析了MINA框架的源码,大家可以从这里进行查看,这篇博客我们使用MINA来完成项目中经常会用到的长连接、短连接、断线重连功能,直接开始了; MINA本身原创 2016-08-13 17:40:31 · 9101 阅读 · 0 评论 -
Toast源码分析
呀呀呀,校招就要来了,撸完这篇就安心准备各种笔试面试啦啦,今天还是继续分析有关Window的内容,系统级Window,就是Toast啦; 我们平常是酱紫使用Toast的:Toast.makeText(MainActivity.this, "这是一个Toast", Toast.LENGTH_LONG).show(); 简单到有点吓人了吧,然而源码层面上面可没那么简原创 2016-09-04 17:46:45 · 1609 阅读 · 0 评论 -
Android-----使用UncaughtExceptionHandler捕获全局异常
在我们通常开发的应用程序中,不可避免的会出现crash现象,特别是当应用程序已经上线之后,这些crash异常信息我们通常是很难捕捉到的,如果我们不能对这些异常信息做及时的收集并且修复的话,势必会带来用户体验度的下降,为此,Android的Thread类中为我们提供了setDefaultUncaughtExceptionHandler方法,这个方法会为我们设置默认的异常处理器,当然这个默认的异常处理原创 2016-08-22 22:41:48 · 1658 阅读 · 0 评论 -
MINA框架源码分析(一)
作为一个比较优秀的网络通信框架,MINA框架大大的方便了我们开发高性能、高扩展性应用程序的效率,他的底层实现是java NIO,众所周知NIO是同步非阻塞式IO,使用它我们可以开发高并发的java程序,但是使用起来过于复杂也让人望而却步,MINA对NIO进行了二次封装,使用起来还是比较简单的,因为项目中用到了他来实现长连接心跳检测,所以决定研究下他的源码,更关键的是他优秀的线程模型和责任链机制,好原创 2016-08-09 16:30:14 · 4092 阅读 · 0 评论 -
MINA框架源码分析(三)
我们接着上一篇继续分析; 在addNow方法执行结束之后,我们已经为当前NioProcessor里面所有的NioSocketSession对应的SocketChannel注册了OP_READ事件,接下来继续查看Processor的run方法,源码在上一篇中有,执行到第49行,判断如果selected大于0执行第52行的process方法,selected的值其实就是Selecto原创 2016-08-10 17:31:39 · 4605 阅读 · 3 评论 -
MINA框架源码分析(二)
上一篇我们通过实例学习了MINA框架的用法,发现用起来还是挺方便的,就那么几步就可以了,本着学东西必知其原理的观念,决定看看MINA的源码实现,好了,我们开始吧! MINA源码对于客户端和服务端来说基本上差别不是很大的,所以我计划主要还是分析服务端的源码,在正式分析之前,我们需要对MINA有一个整体的了解; MINA中涉及到了这么几个对象:原创 2016-08-10 17:29:42 · 7647 阅读 · 5 评论 -
Android内存优化建议
这篇博客主要是总结一些内存优化技巧,大体包括编码优化、Bitmap优化、优化ListView减少内存开销、布局优化、其他优化: 编码优化: (1):使用更加轻量级的数据结构 使用ArrayMap和SparseArray代替我们常见的HashMap,因为对于HashMap来说,它本身是由数组加链表实现的,通常为了他的mapping操作,我们需要开原创 2016-08-25 22:30:30 · 2849 阅读 · 0 评论 -
android-----关于事件分发机制中几点困惑测试
这几天以来对Android开发艺术探索中关于事件机制的总结有点不太明白,今天特地通过demo测试如下两个结论: 1. 某个View一旦决定拦截,那么这一个事件序列都只能由他来处理(如果事件序列能够传递给他的话),并且他的onInterceptTouchEvent不会再被调用; 2. 某个View一旦开始执行处理事件,如果他不消费ACTION_DOWN事件(o原创 2016-06-23 20:56:30 · 1627 阅读 · 0 评论 -
android-----XUtils框架之BitmapUtils源码分析
上一篇使用XUtils的BitmapUtils实现了一个照片墙的功能,参见:android-----XUtils框架之BitmapUtils加载照片实现,这一篇我们从源码的角度分析下BitmapUtils到底是怎么一个执行流程的; 先来回顾下之前我们使用BitmapUtils的步骤: 很简单,就只有两步: (1)通过BitmapUtils的构造原创 2016-06-21 09:23:36 · 4387 阅读 · 0 评论 -
android-----IPC机制学习总结系列(一)
接下来开始了IPC机制的学习,自我感觉这是android中较难的一部分了,打算好好做个学习总结; 首先为什么会出现IPC机制,因为不同进程之间是不共享内存的,那么他们之间就不能通过直接为对象设置属性或者获取属性来共享对象了,所以也就出现了序列化与反序列化过程了,这也是学习IPC机制的基础,说白了IPC是为了进程间通信的,那么通信就意味着进程间会进行数据交互,也就是假如进程1想要使原创 2016-07-06 20:23:01 · 1195 阅读 · 0 评论 -
android-----HandlerThread的使用
最近在看Handler消息机制,不出意外的把HandlerThread怎么使用给忘记了,原因自然就是不懂原理了,网上资料太泛了,感觉有挺多错误的,还是决定自己整理一下了; 下面是我使用HandlerThread的一个小Demo:public class HandlerThreadActivity extends Activity{ @Override protected原创 2016-07-13 21:00:20 · 1262 阅读 · 0 评论 -
android-----事件分发机制测试系列(四)
上一篇,我们从源码的角度分析了View的事件分发过程,这篇我们从实例的角度来看看不同实例下具体的输出会是什么样子的呢?好的,我们开始吧! 同样我们的测试布局文件:<com.hzw.eventtest.MyRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too原创 2016-07-01 18:03:17 · 5224 阅读 · 1 评论 -
android-----事件分发机制测试系列(三)
上一篇我们主要主要是从ViewGroup的角度了解了下事件分发机制,但是没有涉足View的事件分发,也就是说我们没有为MyRelativeLayout、MyLinearLayout、以及MyButton设置Touch和Click监听事件,这一篇为了显示的打印信息比较简洁,我修改了布局文件,具体的布局文件代码如下:原创 2016-07-01 12:13:23 · 4117 阅读 · 0 评论 -
android-----解决Bitmap内存溢出的一种方法(图片压缩技术)
我们在平常使用Bitmap的过程中经常会遇到OOM异常,为此困扰了我两三天时间,接下来把我自己的解决方法讲述一下: 首先来看看为什么使用Bitmap会导致OOM异常的,假如采用Bitmap来加载一个596KB(1920*1152)大小的图片,那么实际上在加载到内存中的时候占用空间的大小将不只是596KB那么大,具体多大呢?计算方法是: 图片的长度 * 图原创 2016-05-27 20:53:08 · 5742 阅读 · 0 评论 -
android-----错误解决
The connection to adb is down, and a severe error has occured.You must restart adb and Eclipse.Please ensure that adb is correctly located at 'D:\android\adt-bundle-windows-x86_64-20130917\sdk\p原创 2016-04-18 22:22:39 · 1372 阅读 · 0 评论 -
android-----Activity生命周期
android四大组件的生命周期对于学习android开发的人来说是必学的知识啦,接下来的几天准备总结一下,首先从Activity的生命周期开始: Activity类中有关生命周期的方法有一下几种: (1)onCreate(): 当活动第一次启动的时候会触发该方法,可以在此完成活动的初始化工作,该方法有一个参数,该参数可以是null,也可以是之前调用onSave原创 2016-05-01 15:26:07 · 1632 阅读 · 0 评论 -
android-----在子线程中更新UI操作的方法
大家都知道android是不允许在子线程中更新UI操作的,所有更新操作都应该在主线程中完成,因而有了异步消息处理机制,具体源码分析见android-----Handler消息处理机制那么除了通过sendMessage以及handleMessage还有哪些方法可以在子线程中书写更新UI操作的代码呢? (1)通过Handler的post方法; (2)通过View的post方原创 2016-04-30 22:22:18 · 2726 阅读 · 0 评论 -
android-----touch事件的层级传递问题
前面我们介绍了android-----事件分发机制到了这里还有一个重要的知识没有解释,在android中,touch事件是在层级传递的,如果我们给一个控件注册了touch事件的话会触发一系列诸如ACTION_DOWN,ACTION_MOVE,ACTION_UP的事件,但是这些事件的执行有个问题就是只有当前一个事件执行结束返回true之后才会执行下一个事件,也就是说只有ACTION_DOWN原创 2016-04-30 21:27:28 · 2037 阅读 · 0 评论 -
android-----LayoutInflater的inflate方法详解
前面在使用Fragment的时候,我们通常都要重写他的onCreateView方法,这个方法的方法的使用如下: public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { return inflater.inflate(R.layout原创 2016-05-10 13:14:53 · 9571 阅读 · 1 评论 -
android-----事件分发机制
我们首先从一个简单的例子开始分析button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { System.out.println("执行onClick"); } }); button.setOnTouchListene原创 2016-04-30 16:18:26 · 4509 阅读 · 0 评论 -
android-----Fragment之间的通信
上一篇介绍了Fragment的生命周期,大致了解了Fragment的生命周期与其所绑定的Activity有密切的关系,这一篇我们学习下Fragment之间的通信;话不多说,通过实例来学习:定义两个Fragment,让他们显示在同一Activity中,注意只有两个Fragment处于同一个Activity中的时候才会涉及到他们之间的通信 fragment1.xml<L原创 2016-05-10 09:57:25 · 1748 阅读 · 0 评论 -
android-----Fragment生命周期
上一篇我们介绍了Fragment的简单应用以及通过Fragment来解决横竖屏切换的情况下显示不同界面,通过Fragment填充多余空间的问题(见:android-----Fragment详解及其运用),这一篇我们介绍下Fragment生命周期; 众所周知,Fragment是可以作为"小Activity"的,嵌套在Activity中使用,因此他的生命周期和Activity是分不开的原创 2016-05-10 09:11:53 · 2201 阅读 · 0 评论 -
Android---Handler消息处理机制
搞Android的人都知道,android是不允许你在子线程中更新UI操作的,这主要出于线程安全方面的考虑,通常的做法是在主线程中创建一个Handler对象,在子线程中创建一个Message对象,该Message对象中封装一些更新UI操作的数据,通过Handler的sendMessage方法发送出去,主线程利用Handler的handleMessage方法来对该Message进行相应的处理,但发现原创 2016-04-13 13:52:33 · 2730 阅读 · 0 评论 -
android-----Activity启动模式
当应用程序运行起来之后,android系统会开启一个线程,这个线程主要用途就是为了维护应用程序在运行过程中的Activity栈,每当创建一个Activity之后都会将该Activity压入到栈中,Activity的启动模式是指当栈中已经存在该Activity实例的情况下该怎么处理,不同的模式处理方式是不同的,因而我们有必要来探讨下Activity的启动模式。 Activity的启动模原创 2016-04-14 18:13:41 · 1507 阅读 · 0 评论 -
android-----带你一步一步优化ListView(二)
上一篇介绍了通常我们优化ListView的方式,但是这点对于要加载大量图片的ListView来说显然是不够的,因为我们知道要想获取一张图片不管是本地的还是网络的,其性能上均没有从内存中获取快,所以为了提升用户的体验度,对于加载图片的ListView,通常我们会通过缓存做以下优化: 基本思想: (1)如果想要加载图片,首先先去内存缓存中查看是否有图片(内存缓存原创 2016-05-28 11:26:40 · 6200 阅读 · 2 评论 -
android-----带你一步一步优化ListView(三)
前两篇我们介绍了一般的优化ListView方法以及DiskLruCache优化ListView,见android-----带你一步一步优化ListView(一)和android-----带你一步一步优化ListView(二),这一篇我们将从内存缓存的角度来完成ListView的优化,使用的是LruCache,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且原创 2016-05-28 18:20:15 · 6228 阅读 · 0 评论