自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 反射技术在android中的应用

动态语言:一般认为在程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。尽管这样,JAVA有着一个非常突出的动态相关机制:反射(Reflection)。运用反射我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载在运行时才得知名称的class,获悉其完整

2016-06-30 13:53:27 16007 5

原创 真的知道LayoutInflater的正确用法么?

LayoutInflaterLayoutInflater中文译为布局膨胀,是Android中使用context来调用的一个术语,用来指导一个XML布局资源被正确解析,并且转换成一个视图对象的层次结构。当我们有一个XML布局文件需要解析成View的时候,LayoutInflater就会被用到,但是你有可能会惊讶的发现也或者不会发现,有一种错误的LayoutInflater使用方式经常出现在代码中。如果

2016-06-27 21:27:35 1769 1

原创 回溯法

小组人内分享会,继续研究算法。 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。八皇后问题: 八皇后问题是能用回溯法解决的一个经典问题。八皇后问题是一个古老而著名的问题。该问题是十九世纪著名的数学家高斯185

2016-06-03 16:33:40 432

原创 两种方式实现圆形图片

一,自定义drawable利用画笔方法setShader()。 自定义Drawable 代码public class MyDrawable extends Drawable { private Paint mPaint; private Bitmap bitmap; public MyDrawable(Bitmap bitmap) { this.bitmap

2016-05-26 15:00:21 785

原创 BroadcastReceiver中的那些设计模式

前文写过BroadCastReceiver的源码的分析BroadcastReceiver源码解析(二),文章很长终于把广播的注册和发送流程详细的分析了一遍。最近用RationalRose画了画它的类图,于是将BroadCastReceiver中涉及的设计模式分析分析,准备再扒一层。 由于技术水平有限,研究了BroadCastReceiver的过程中,目前只发现涉及到了三种设计模式,分别为观察者,代

2016-05-25 16:02:35 4671

原创 微信底部滑动时图标渐变色的实现

周末想实现一下微信底部的渐变图案,折腾了一波,效果总算得上是差强人意。 下面是QQ的微信图标首先想到两个方案就是设置背景透明度,和属性动画。但效果都被否决了,属性动画效果逼真一些,但是顶多算是B货。要实现高仿的A货,尽管不喜欢用还是得自定义View了。 折腾了好久尽管效果很接近,但是效果还是有所区别。但是自从看了微信的图片资源后,立马就反应过来了,原来这玩意是这样设计的。利用两张同样大小的图片,

2016-05-23 12:20:35 6159 1

原创 BroadcastReceiver源码解析(二)

广播注册部分见BroadcastReceiver源码解析(一)4,BroadcastReceiver之源码分析 4.1,动态注册过程源码分析在Activity中动态注册广播时,在注册方法之前其实省略了Context,也就是实际上调用的是Context. registerReceiver()。Context是一个抽象类,它是Client端和AMS,WMS等系统服务进行通信的接口,Activity、Se

2016-05-12 09:14:59 9184 2

原创 BroadcastReceiver源码解析(一)

1,简介BroadcastReceiver,中文直译为“广播接收者”,在Android 系统中,广播主要用在组件与组件之间进行消息传递。组件与组件之间可以是同一个进程,也可以是不同进程。既然是可以跨进程的,那么可以想像底层应该是基于Binder来实现的,事实也正是如此。2,为什么要有广播既然BroadcastReceiver是基于Binder的,那么用纯Binder进行通信就行了,为什么还要创造出B

2016-05-12 09:02:52 2607

原创 IPC(六)—一张图解释Messenger的设计思想

Aidl和Messanger是Android 中常用的IPC方式。首先,Aidl内部是基于Binder的,而Messenger内部又是基于Aidl的。但是messenger和Aidl还是有所区别的。 学习Aidl的时候常会看到: “Using AIDL is necessary only if you allow clients from different applications to ac

2016-04-15 12:01:01 667

原创 IPC(五)——浅谈AIDL的架构原理

在 IPC(一)利用纯Binder通信(非aidl)中实现了,如何通过纯粹的Binder实现进程间的通信。然后在IPC(四)_Aidl的基本使用过程实现了如何通过Aidl实现进程间的通信。翻看代码的编写过程,其实大体上都差不多,而且也提到Aidl实质上就是对纯Binder通信进行了一次封装,毕竟IBinder中的transact()方法传递的参数不方便使用,大大增加了开发者的使用负担。于是Googl

2016-04-13 15:39:40 850

原创 IPC(四)_Aidl的基本使用过程

AIDL全称 Android Interface definition language的缩写,顾名思义,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口. 下面是AIDL的详细使用过程。 简单起见,就完成一个客户端调用服务端,完成一次两个数加法的运算。 首先新建一个工程Server,然后规范起见,创建一个单独的.aidl的包。右键新建文件,创建一个.aid

2016-04-13 10:30:44 379

原创 AlertDialog Unable to add window

在广播中启动AlertDialog报这个错误android.view.WindowManager$BadTokenException: Unable to add window — token null 。其实解决这个问题首先要搞清楚window原理。AlertDialog 首先是一个View。在Android系统中,任何一个View都是依附Window来启动的。FrameWork定义了三种窗口类型

2016-04-11 17:09:31 481

原创 关于getsupportFragmentManager报错

群里最近好多人问在使用fragment的时候,获取fragmentManager爆红,提示说没有这个方法。 其实原理很简单。首先Fragment是3.0之后的东西,3.0之后获取FragmentManager使用的方法是getFragmentManager() ,3.0之前压根没有Fragment。但是google提供了3.0之前也能用Fragment的功能,那就是使用android-suppor

2016-04-11 16:27:30 6249

原创 IPC(三)浅析Binder进程通信和ServiceManager

Binder机制是Android中实现的进程间通信的架构,它采用的是C-S架构,Client通过代理完成对Server的调用。既然是C-S模式,那么谁是Server呢?答案就是Native中的进程:ServiceManager。 顾名思义,这个是用来管理所有Server的。Android设备在硬件启动之后,第一个进程就是init进程,init进程启动之后,会启动另外一系列的进程,其中最重要的就是Z

2016-04-11 15:46:11 607

原创 IPC(二)初识进程和Binder

*什么是IPC通信 IPC(Inter-Process Communication)通信,是跨越两个不同进程(Process)之通信,一般而言,一个Android应用程序里的各组件(如Activity、Service等)都在同一个进程里执行。这种在同一进程内的通信,又称为短程通信,意味着,两个Activity在同一个进程(Process)里执行。相对地,远程(Remote)通信的意

2016-04-06 10:58:44 1560

原创 IPC(一)利用纯Binder通信(非aidl)

在Android中,当两个类都在同一个进程里执行时,两者之间的沟通,只要采取一般的函数调用(Function Call)就行了,既快速又方便。一旦两个类分别在不同的进程里执行时,两者之间的沟通,就不能采取一般的函数调用途径了。只好采取IPC沟通途径。Android框架的IPC沟通仰赖单一的IBinder接口。此时Client端调用IBinder接口的transact()函数,透过IPC机制而调用到远

2016-03-25 10:07:37 1085 1

原创 动态规划

备注:给小组人员讲解算法临时准备的稿子,记录自己的点点滴滴。 定义:动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解

2016-01-25 14:33:19 489

原创 Android View的事件分发机制

新版的view的事件分发机制相较于老版本的还是改动了一些地方,这个准备记录下来,以免忘记和不时之需。 Android中的触摸事件的分发执行顺序是从ViewGroup中的dispatchTouchEvent–onInterceptTouchEvent,如果onInterceptTouchEvent返回true,表示拦截,这时执行ViewGroup中的onTouch方法。如果onInterceptTo

2016-01-25 13:54:59 389

原创 算法之基本排序(冒泡,选择,插入)

冒泡排序: 在一次遍历中将最大值挨个两两交换到最后面,之后开始下一次前(n-i)位数的遍历,依次将最大数交换到最后一位。public class BubbleSort { public int[] bubbleSort(int[] A, int n) {//int类型数组,n为数组的长度 for(int i=0;i<n;i++) {

2015-12-16 15:41:27 365

原创 仿QQ侧滑删除(简陋版)

今天想试试android View的事件分发机制,于是自制了一个仿QQ的侧滑删除当小白鼠,利用这个来验证View面对不同的情况下,的事件分发情况。 由于是当给自己当试验品用,做的有点简陋,不对那可是相当简陋。 原理:首先一个全屏的item加上一个button拼接成一个HorizontalScrollView。让button显示在屏幕的外面,当侧滑的时候显示出button。之后放入listview

2015-12-09 17:15:42 528

原创 递归与分治策略

递归与分治策略凡治重如治寡,分数是也————孙子兵法 分治的设计思想:将一个直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。个子问题之间既是相互独立的,彼此之间也存在联系; 递归的设计思想:将求出的小规模问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。 递归的概念:直接或者间接的调用自身的算法称为递归,用函数自身给出定义的函数叫做递归函数。 Act

2015-12-07 15:25:33 480

原创 Android 关于接口回调原理的解析

接口回调,咋听起来可能会感觉很高大上,很复杂的逻辑的一种思想。特别是在Android中,每次都用,但有时候只是知道这样用,却不知道怎么实现的。但其实任何面向对象语言使用无非就是封装,继承,多态。其他的万变不离其中。要理解接口回调的机制,我觉得首先要清楚面向对象多态的概念。以下是自己在开发中的理解。 多态:c++中的理解时允许将子类类型的指针赋值给父类类型的指针,其实就是有一个容器保存了父类的指针类型

2015-10-29 17:29:21 3828 2

提示
确定要删除当前文章?
取消 删除