- 博客(202)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 View机制深入学习(五) 事件处理机制一
以TouchEvent为主,看一下View和ViewGroup内部是如何处理Input Events的; 首先来看事件的产生来源:一、获取事件:事件的来源可以分为“软件”,“硬件”两种; 主要的事件包含有: 按键事件(KeyEvent) :即物理按键按下产生的事件,相关的常用物理按键一般有HOME,BACK等 触摸事件(TouchEvent): 鼠标事件(MouseEvent)、轨
2016-05-10 17:26:37
2329
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Activity启动过程(一)AMS
在前面《Android启动过程》中提到了System进程启动ActivityManagerService服务,AMS是由Android提供的用于管理Activity(不仅仅指Activity,还包括其他三个组件)运行状态的系统进程,则是平时编写APK应用程序时使用得最频繁的一个系统服务。 AMS是通过ActivityStack(和其它数据结构)来记录、管理系统中的Activity(和其它
2015-08-25 10:22:26
2616
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android启动过程——init,Zygote,SystemServer
一、Android设备启动经历的三个阶段:Boot Loader;Linux Kernel;Android系统服务;每个阶段都有自己的启动画面。1、Android中第一个被启动的进程——init,init进程的PID为0,其他的服务都由其进行创建。它是通过解析init.rc脚本来构建出系统的初始运行状态的。init进程是在系统启动启动过程中启动的。2、init.rc语法规则:1)Act
2015-08-18 11:12:29
3961
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Binder机制解析(一)
一、Binder通信流程简单概述(一)Binder用以Android内部的进程间通信,Binder相对于传统的Linux内核IPC(管道,信号,消息队列,共享内存,插口等)具有仅需拷贝一次内存的好处,进而提高了效率,也节省了内存; 从设计模式来看,Binder通信可以抽象为上图C/S模式,数据通信流程已经足够清晰。从中可以看出:1、Client组件获得Service组
2015-07-13 16:51:56
2046
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Volley源码分析
一、Volley框架图 根据图简单猜测Volley工作的流程,见右下角的注释,蓝色表示主线程(main thread),绿色表示缓存线程(cache thread),黄色表示网络线程(network threads);再寻找图中的关键字:queue(RequestQueue),cache queue,CacheDispatcher,NetworkDispatcher;
2015-06-19 11:04:47
3450
原创 设计模式汇总:结构型模型(下)
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模
2016-05-25 16:29:41
7692
原创 Retrofit源码解析
square公司开源了一系列的优秀库,比如Retrofit,OkHttp,Picasso等, 前面简单分析了Picasso的源码,这里来分析下Retrofit的使用:一、gradle添加依赖compile 'com.squareup.okhttp:okhttp:2.4.0'compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'compi
2016-05-23 08:54:51
12134
6
原创 Fragment源码解析
一、Fragment的简单使用:FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();transaction.add(R.id.radio1, tabFourFragment, tabFourFragment.getTag());transaction.remove(tabFourFrag
2016-05-18 19:11:34
4911
1
原创 Picasso源码解析
一、Picasso使用:gradle:compile 'com.squareup.picasso:picasso:2.5.2'使用:Picasso.with(this).load("http://...../photo3.jpg").into(myImg);自定义的使用方法:Picasso picasso = new Picasso.Builder(this) .memoryCach
2016-05-15 17:03:14
8174
2
原创 设计模式汇总:结构型模型(上)
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模
2016-05-12 10:11:43
7210
3
原创 二叉树简单汇总
一、二叉树常见算法二、二叉搜索树(BST,也称二叉查找树): 1、定义: 是指一棵空树或者具有下列性质的二叉树: 任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节点。2、性质: 构建一个有n个不同关键字的二查搜索树的期望高度为h = O(lg
2016-05-05 16:02:50
634
原创 设计模式汇总:创建型模式
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模
2016-04-30 17:26:47
10378
1
原创 ArrayMapy、SparseArray源码学习
ArrayMap和SparseArray是Android中提供用来替代HashMap实现内存优化的集合类,来具体看下其源码实现: 一、ArrayMap简单分析 1)存储原理: HashMap是使用一个table数组来存储;发生冲突时采用链地址法以链表或者红黑树的形式进行存储; 而ArrayMap使用的是两个数组,mHash数组用来存储hash值(顺序存储);mArray在对应位置存储(比如m
2016-04-21 22:14:13
911
原创 简单算法汇总
零、全排列问题(Permutation) 问题描述:即给定{1,2,3},返回123,132,213,231,312,321 《Permutation》 1)无顺序的全排列问题: 将序列P(n) = {1….. n}的全排列问题看成P(n)={1,P(n-1)} + {2,P(n-1)}…..的问题,即确定第一个元素的值为1,然后和剩下n-1个元素的全排列结果组合到一起;然后再将1和剩下的每
2016-04-19 21:19:00
3964
2
原创 GSON源码解析
把之前做的笔记又重新整理了一下,发现简单只看了GSON的解析流程;1、GSON的两种解析使用方式:1)直接利用GSON中默认的反射机制来解析:Gson gson1 = new Gson();gson1.fromJson(str, Data.class);2)利用自定义的TypeAdapter来解析:// Builder模式GsonBuilder gsonBuilder
2016-03-13 20:58:10
1524
原创 Handler机制深入解析
知乎上看到这样一个问题Android中为什么主线程不会因为Looper.loop()里的死循环卡死?,于是试着对Handler源码重新看了一下,其实Android的消息机制是Pipe+epoll,有消息时则依次执行,没消息时调用epoll.wait等待唤醒;由于Android中生命周期、UI绘制都是动过Handler实现的,因此自然不会发生阻塞卡死。1、创建Looper之间Java
2016-03-02 15:50:07
1319
原创 简单的自定义加载ProgressBar
控件效果图:一、在attr中自定义属性: 二、在布局中使用:<hust.mytestview.LoadingProgressBar
2016-02-24 22:09:33
936
原创 Service绑定形式启动过程
一、绑定形式Service的使用1)定义一个Service,注意重写onBind方法,返回一个IBinder对象public class MyService extends Service { public static final String LOG_TAG = "LOG_TAG"; private MyBinder mBinder = new MyBinde
2016-01-18 10:56:46
1418
原创 圆形图片CircleImageView
1、在values文件中创建attrs.xml,自定义属性: 2、在布局文件中使用:<cn.edu.hust.buildingtalkback.myview.CircleImageView android:id="@+id/target_user_photo" android:layout_width="50dp" a
2016-01-14 20:26:50
826
原创 leetcode 58、Length of Last Word;59、Spiral Matrix II ;60、Permutation Sequence
58、Length of Last Word 最后一个单词的长度一、问题描述:Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word in the string.If the last word
2016-01-13 22:01:05
1071
原创 Service组件的启动机制深入学习
一、通过startService方式启动1、ContextWrapper#startService:/** @path: \frameworks\base\core\java\android\content\ContextWrapper.java **/@Overridepublic ComponentName startService(Intent service) {
2016-01-12 10:51:09
1140
原创 程序员面试金典——递归问题汇总
一、简单动态规划问题1、机器人走方格I 类似的参见《斐波那契数列》 有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。 class Robot { // public i
2016-01-11 21:30:27
1344
原创 Activity组件启动过程(三)
承接上面文章《Activity组件启动过程(二)》中的分析,继续进去看startSpecificActivityLocked:11、ActivityStackSupervisor#startSpecificActivityLocked:/** @path: \frameworks\base\services\core\java\com\android\server\am\ActivityS
2015-12-28 16:44:27
1287
原创 Android EventBus源码解析
一、EventBus的简单使用流程《Android EventBus的简单使用》中介绍了EventBus的简单使用,从 EventBus.getDefault().register(this);开始,注意在类中实现相应的onEvent方法: public void onEventMainThread(ActivityToServiceEvent even
2015-12-24 19:54:24
856
原创 Java多线程——死锁
一、死锁 0、死锁的定义:(资源死锁) 如果一个进程集合中的每个进程都在等待只能有该进程集合中的其他进程才能引发的事件,那么该进程集合就是死锁的。1、产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则 就会因争夺有限的资源而陷入死锁。其次,进程运行
2015-12-21 09:52:22
982
原创 leetcode-56 Merge Intervals 合并区间
问题描述:Given a collection ofintervals, merge all overlapping intervals.For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18].Subscribe to see which companies asked thisquest
2015-12-20 16:06:02
914
翻译 Java中String为什么被设计成immutable(不可修改的)/final
原文链接:http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/ String是Java中的一个immutable类。immutable类意味着该类的实例将无法被修改。该实例中的所有信息在其被创建时就已经被完全初始化,同时之后也无法再作修改。对于immutable类而言,其有很多优点。1)字符串常量池
2015-12-16 22:24:45
1389
原创 剑指Offer 二叉树相关问题
0、二叉树的三种遍历方式http://blog.csdn.net/woliuyunyicai/article/details/444585811、重建二叉树题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,
2015-12-14 19:49:16
1298
3
原创 剑指offer题21 包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。题目解析:题目的重点在于,每次调用min函数都可以pop出当前栈中的最小值;可以考虑使用一个辅助栈minStack,当每次push进来一个数值node时,minStack将当前栈顶值(默认当前最小值)与node进行比较,push捡来最小值;则在每个时刻,minStack中保存的都是当前栈中的最小值
2015-12-06 20:48:08
904
原创 leetcode-55 Jump Game 最远距离问题
问题描述:Given an array ofnon-negative integers, you are initially positioned at the first index of thearray.Each element in the arrayrepresents your maximum jump length at that position.Determine i
2015-12-02 20:28:25
1009
原创 leetcode-54 Spiral Matrix 顺时针打印矩阵(《剑指offer》面试题20)
问题描述:Given a matrixof m x n elements (m rows, n columns),return all elements of the matrix in spiral order.For example,Given the following matrix:[ [ 1,2, 3 ], [ 4,5, 6 ], [ 7,8, 9 ]
2015-12-02 19:23:12
1443
原创 leetcode-53 Maximum Subarray 连续子数组的最大和
问题描述:Find the contiguoussubarray within an array (containing at least one number) which has the largestsum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1]
2015-11-27 20:48:52
1788
原创 leetcode-51 N-Queens N皇后问题
问题描述:The n-queenspuzzle is the problem of placing n queens on an n×n chessboardsuch that no two queens attack each other.Given an integer n,return all distinct solutions to the n-queens puzzle
2015-11-26 15:56:48
1490
原创 Android使用MPAndroidChart绘制图表
由于Google提供的AChartEngine的功能强大但使用起来较为复杂,MPAndroidChart同样能够实现一些效果较好的直方图,折线图,饼图等绘制,使用也较为简单轻便;项目地址:https://github.com/PhilJay/MPAndroidChart 效果图:LineChart (with legend, simple design) LineChar
2015-11-24 09:58:36
2118
原创 Android ListView使用总结
一、监听ListView的滑动方向方法一:myList.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { float x = event.ge
2015-11-17 09:59:22
851
原创 剑指Offer 链表相关问题--从尾到头打印链表、合并两个排序的链表
面试题5:从尾到头打印链表题目描述:输入一个链表,从尾到头打印链表每个节点的值。题目解析:方法一:先遍历链表,将每个节点push进栈中,然后再依次弹出。即实现逆序输出方法二:通过递归的方式(但要考虑链表过长,递归层次过深的情况)方法三:反转链表,然后遍历输出(不建议采用)代码:方法一:/** * public class
2015-11-16 22:55:48
827
原创 Android EventBus的简单使用
Activity与Service之间的通信(组件之间的通信)1、Activity 绑定Service形式2、使用BroadcastReceiver通信3、定义interface进行回调4、使用EventBus通信:EventBus是一个事件订阅/发布模型,用以简化Android内部组件之间的数据通信。Android Studio中
2015-11-16 21:21:54
1047
原创 View机制深入学习(四)View的事件分发机制
当发生点击事件后,事件会最先传递给当前的Activity,Activity调用dispatchTouchEvent来进行事件的dispatch;1、Activity#dispatchTouchEvent:/** \frameworks\base\core\java\android\app\Activity.java **/public boolean dispatchTo
2015-11-16 15:10:26
1207
原创 Android学习总结2
一、屏幕出现卡顿的原因:表面原因:1、在UI主线程中执行比如像网络下载等耗时的操作,致使CPU没有能力在16ms内完成对下一帧显示数据的处理2、需要显示的界面太过复杂,比如布局的层次较深,界面控件过多等,给CPU与GPU的渲染造成压力3、手机硬件GPU、CPU处理能力有限,FPS低于16ms,造成卡顿;Android 4.1后Triple Buffering三缓冲机制一定程度上缓解
2015-11-09 08:32:59
852
原创 剑指Offer——链表中快行指针用法(链表中倒数第k个结点等)
问题一、链表中倒数第k个结点题目描述:输入一个链表,输出该链表中倒数第k个结点。问题分析:典型的链表快行指针法,设置两个指针,使前一个指针p1先走k步,然后两个指针p1,p2同时出发;当p1走到链表末尾的时候,p2所指的元素即是所要求的链表倒数第k个节点;代码:/*public class ListNode { int val; L
2015-11-06 20:30:51
1028
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人