- 博客(355)
- 资源 (18)
- 问答 (2)
- 收藏
- 关注
翻译 深入浅出Android Support Annotations
在Android Support Library19.1版本中,Android工具小组引入了几个很酷的注解类型,供开发者在工程中使用。Support Library自身也使用这些注解,这是一个好兆头
2015-02-19 01:10:57 3171 1
翻译 什么是函数响应式编程(Java&Android版本)
函数响应式编程(FRP)为解决现代编程问题提供了全新的视角。一旦理解它,可以极大地简化你的项目,特别是处理嵌套回调的异步事件,复杂的列表过滤和变换,或者时间相关问题。
2015-02-17 21:15:29 5330 2
翻译 Android开发最佳实践
原文链接:https://github.com/futurice/android-best-practices本文是Futurice公司的Android开发人员总结的最佳实践,遵循这些准则可以避免重复制造轮子。如果你对iOS或者Windows Phone开发感兴趣,那么也请看看iOS最佳实践(https://github.com/futurice/ios-good-practices)和Win
2015-02-10 10:46:53 5995 6
翻译 实战生成器模式(Builder Pattern In Practice)
原文链接:http://www.javacodegeeks.com/2013/01/the-builder-pattern-in-practice.html 我不会详细介绍这个模式,因为已经有大量的文章或者书籍对该模式进行过详细的解析。我将告诉你的是为什么以及什么时候你应该考虑使用它。值得一提的是,我所介绍的这个模式和设计模式四人帮的书(《设计模式:可复用面向对象软件的基础》)里面的有些
2015-01-29 15:05:26 2327
原创 【Java&Android开源库代码剖析】のandroid-async-http の网络响应ResponseHandlerInter
由于我们设计的是异步的网络请求框架,因此代码实现使用的是基于接口回调的方式来处理从服务器端返回的数据,鉴于数据格式多种多样,例如有二进制文件,普通文本文件,json格式字符串 ,xml格式字符串,断点续传文件等等,因此从响应处理接口会派生出很多子类,专门处理不同格式的数据。从下面的UML类图可以看到响应处理器接口是ResponseHandlerInterface,从这个接口派生出AsyncHttp
2014-11-11 15:37:07 5802 2
原创 【Java&Android开源库代码剖析】のandroid-async-http の开篇
在《【Java&Android开源库代码剖析】のandroid-smart-image-view》一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架。做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的
2014-11-11 15:13:53 1653
原创 Eclipse UML插件AmaterasUML的配置及使用
AmaterasUML是个人觉得最好用的Eclipse UML插件,可以通过拖拽Java源文件,轻松生成类图结构,同时支持活动图、时序图和用例图。它的官方下载地址是:http://sourceforge.jp/projects/amateras/releases/#21568 ,目前最新是1.3.4版本,读者也可以到我的网盘直接下载:http://pan.baidu.com/s/1o6BeFl
2014-11-03 17:56:38 29708 12
原创 [当我在研究Cocos-2dx的源码时,我在想什么]-Ref类,一切的起源
【名词解释】 引用计数:引用计数是现代内存管理中经常使用到的一个概念,它的基本思想是通过计数方式实现多个不同对象同时引用一个共享对象,具体地讲,当创建一个对象的实例并在堆上分配内存时,对象的引用计数为1,在其他对象中需要持有这个共享对象时,需要把共享对象的引用计数加1,当其他对象不再持有该共享对象时,共享对象的引用计数减1,当共享对象的引用计数变成0时,对象的内存会被立即释放。(部分截
2014-10-10 11:17:04 2371
翻译 【Java编码准则】の #12不要使用不安全或者强度弱的加密算法
安全性要求高的应用程序必须避免使用不安全的或者强度弱的加密算法,现代计算机的计算能力使得攻击者通过暴力破解可以攻破强度弱的算法。例如,数据加密标准算法DES是极度不安全的,使用类似EFF(Electronic Frontier Foundaton) Deep Crack的计算机在一天内可以暴力破解由DES加密的消息。[不符合安全要求的代码示例] 下面的代码使用强度弱的DES
2014-06-21 23:46:44 13001
翻译 【Java编码准则】の #11不要使用Object.equals()来比较密钥值
java.lang.Object.equals()函数默认情况下是不能用来比较组合对象的,例如密钥值。很多Key类没有覆写equals()函数,因此,组合对象的比较必须单独比较里面的各个类型以保证正确性。[不符合安全要求的代码示例] 下面的代码使用equals()函数比较两个key值,key值即使具有相同的取值也可能会返回不相等,导致结果出错。 private static b
2014-06-21 23:34:24 1884
翻译 【Java编码准则】の #13使用散列函数保存密码
明文保存密码的程序在很多方面容易造成密码的泄漏。虽然用户输入的密码一般时明文形式,但是应用程序必须保证密码不是以明文形式存储的。 限制密码泄漏危险的一个有效的方法是使用散列函数,它使得程序中可以间接的对用户输入的密码和原来的密码进行比较,而不需要保存明文或者对密码进行解密后比较。这个方法使密码泄漏的风险降到最低,同时没有引入其他缺点。[加密散列函数] 散列函数产
2014-06-21 23:02:53 2291
翻译 【Java编码准则】の #02不要在客户端存储未加密的敏感信息
当构建CS模式的应用程序时,在客户端侧存储敏感信息(例如用户私要信息)可能导致非授权的信息泄漏。 对于Web应用程序来说,最常见的泄漏问题是在客户端使用cookies存放服务器端获取的敏感信息。Cookies是由web服务器创建的,它具有一个指定的有效时间,保存在客户端。当客户端连接上服务器端时,客户端使用cookies中存储的信息向服务器端进行认证,通过后服务器端返回敏感信息。
2014-06-21 22:08:34 2142
翻译 【Java编码准则】の #01限制内存中敏感数据的生命周期
当竞争对手的应用程序与我们的应用程序运行在同一个系统上时,我们的应用程序在内存中的敏感数据是很容易被竞争对手获取的。如果我们的应用程序符合下面几种情况之一,那么竞争对手可以获取到我们应用的敏感数据:1)应用程序使用对象来存储敏感数据,而且在对象使用完后,对象的内容没有被清除或者对象没有被垃圾回收;2)在操作系统运行内存管理任务或者执行休眠等功能时,应用程序的内存分页将被置换到磁盘上保存;
2014-06-15 22:09:27 3237
翻译 【Android平台中的安全编程】の #01-限制app的敏感ContentProvider的可访问性
ContentProvider类提供了与其他app管理和共享数据的机制。当与其他app共享provider的数据时,必须小心的实现访问控制,防止对敏感数据的非法访问。限制ContentProvider的访问有三种方法:PublicPrivateRestricted access
2014-06-10 09:07:42 2091
原创 【直接拿来用のandroid公共代码模块解析与分享】の Notification和NotificationManager
Android项目做得多了,会发现原来很多基础的东西都是可以复用,这个系列介绍一些自己项目中常用到的公共模块代码(当然只谈技术不谈业务),一来整理好了自己以后可以直接用,二来也分享给大家,希望能稍微减少大家的加班时间,提高些许效率。Android Notification的原理和作用这里就不作说明了,相信是个android开发者都用过不止一次了,以下只介绍如何封装成公共的模块,以供整个项目使用
2014-06-09 20:46:20 1978
原创 【Java&Android开源库代码剖析】のAndroid-Universal-Image-Loader-part1
做Android app开发的同学应该都听说过或者用过nostra13的Android-Universal-Image-Loader开源库,它在图片异步加载、缓存和显示等方面提供了强大灵活的框架。之前介绍过的android-smart-image-view开源库跟它比起来,真是小巫见大巫了,不仅在功能上,而且在代码量上都差别很大。当然我们在选取开源库的时候并不是功能越强大越好,一切都要看具体需求,
2013-08-25 19:01:14 4444 2
原创 【Java&Android开源库代码剖析】のandroid-smart-image-view
Android应用开发已经进入到相对成熟的阶段,特别在国外,涌现出了各式各样的成熟稳定的开源库,供普通开发者使用。这种情况虽然极大加速了app开发的进程,但同时带来的问题是大多数普通开发者在使用这些开源库的时候只是止步于知道怎么使用它,但对开源库的底层实现原理并不清楚,或者不怎么深究,导致的问题很多:1)当开源库出现bug时,不能够很好很快的定位出问题;2)自己日常的代码编写只局限于实现app的业
2013-08-22 15:41:07 4427 5
原创 如果消除重复代码?从Timer和TimerTask的封装说起
最近抽空在做代码的优化工作,或者说小步的重构,我们从著名的《重构》一书中可知,代码的坏味道首当其冲的就是重复代码,当同一个类中不同函数包含重复代码时,应该考虑将重复代码抽取成函数,当不相干的两个类中出现重复代码时,则应该考虑将重复的代码抽取成一个类。这篇文章就来讲讲去除重复代码的一个例子。在项目开发中,经常会在不同的地方用到定时器Timer,Timer要定时执行的任务是TimerTask,一般
2013-05-17 14:12:13 2957
原创 Android基于WIFI实现电脑和手机间数据传输的技术方案研究
Android手机和电脑间基于wifi进行数据传输,从技术上讲,主要有两种方案:一种是通过ftp协议实现,Android手机作为数据传输过程中的ftp服务器;一种是通过http协议实现。Android手机作为数据传输过程中的http服务器。所以,技术实现的难点在于我们的app怎么实现ftp或者http服务器的功能,当然可以自己先阅读ftp协议或者http协议,根据规范自己实现一个,如果
2013-02-03 12:10:44 17354 4
原创 Android字数限制的EditText实现方案研究
在应用开发中,有时需要实现有字数限制的EditText,首先来分析下市面上存在的类似实现方案吧,好有个感性的认识。【方案一:腾讯微博】每个中文字符算一个字数,每两个英文字符算一个字数,当用户输入内容时,实时显示剩余的字数,当超出字数限制时,剩余字数显示为负数,但此时用户仍然可以继续在EditText中输入内容,直到用户点击菜单中的“发送”按钮时,才会弹出对话框或者Toast显示用户
2012-11-11 23:58:14 18121 23
原创 Android调用系统邮件类应用的正确实现方法
Android应用开发中,很多情况下免不了要调用手机上的邮件类应用,实现邮件发送的功能,这一般是通过调用系统已有的Intent来实现的。看到网上很多邮件发送都是调用action为android.content.Intent.ACTION_SEND的Intent来实现的,下面我们就来看下这种方式实现的效果如何。【使用Intent.ACTION_SEND方式】具体的UI搭建我就不说了,
2012-10-27 23:27:26 12855 3
原创 Android开源代码解读-基于SackOfViewAdapter类实现类似状态通知栏的布局
一般来说,ListView的列表项都会采用相同的布局,只是填充的内容不同而已,这种情况下,Android提供了convertView帮我们缓存列表项,达到循环利用的目的,开发者也会使用ViewHolder模式来对ListView进行优化。但有的情况下,ListView的列表项布局是不尽相同的,甚至差别很大,这时就不能简单的使用同一个布局资源文件来表示不同类型的列表项了,而是必须区别对待。典型的情况
2012-09-17 16:42:49 3283 3
原创 UPnP协议学习笔记-寻址
寻址(Addressing)是UPnP网络连接的第0步,通过寻址,设备和控制点将获得IP地址。UPnP设备和控制点可以只支持IPv4,也可以同时支持IPv4和IPv6。对于每个控制设备或控制点而言,如果自身没有实现DHCP服务器,则在它们首次接入UPnP网络时,必须通过DHCP客户端来搜寻DHCP服务器(如果它们自身实现了DHCP服务器,则可以给自己从地址池中分配IP地址)。如果存在DHCP服务器
2012-09-15 11:26:17 3040
原创 UPnP协议学习笔记-简介
【什么是UPnP技术?】 UPnP(Universal Plug and Play)技术是针对智能家电、无线设备和各种类型的个人电脑进行普遍点对点(P2P)网络连接而设计的一种架构。它被设计为连接到ad-hoc或者非托管网络的家庭、小型企业、公共场所,提供易用、灵活、基于标准的连接。UPnP技术是一个利用TCP/IP和网络技术实现的分布式的开放网络架构,它除了提供网络设备间的控制和数据传输
2012-09-14 00:07:21 5028
原创 Android开源项目-Jamendo音乐播放器研究与优化-基于Builder模式的数据库操作
【一个音符的时值按二等分的原则,成偶数细分下去,称为音符时值的基本划分】--- 《五线谱基础教程》对于一个完整的应用来说,数据库操作往往是避免不了的,Jamendo基于生成器模式(Builder Pattern)构建数据库操作的整个框架。那么首先看下生成器模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。典型结构图如下所示:
2012-09-01 19:26:31 3188 3
原创 Android开源项目-Jamendo音乐播放器研究与优化-Adapter相关
【休止符是音乐中无声的节奏进行,恰似此时无声胜有声;而音符是音乐中有声的进行,是唱奏出来的,但相对应的几分音符与几分休止符的时值是相同的】--- 《五线谱基础教程》一 自定义Adapter的抽象基类Android项目开发中经常会用到ListView、GridView等需要和Adapter配合使用的控件,对于界面界面较多,且用到多个不同布局的ListView等时,自然而然的就
2012-08-23 23:37:36 3783 2
原创 Android开源项目-Jamendo音乐播放器研究与优化-手势操作
【五线谱上确定音的高低的记号叫做谱号,谱号有三种:G谱号(高音谱号)、F谱号(低音谱号)和C谱号(中音谱号)】 --- 《五线谱基础教程》 Jamendo的手势操作用于控制歌曲的播放,有四个手势分别对应:播放,暂停,上一首和下一首。本文主要讲解手势操作部分的实现,至于涉及到媒体播放器的部分,将不作细讲,放在后续文章中。 一 Android手势操作APIAndroid提供
2012-08-20 23:56:30 5154 3
原创 Android开源项目-Jamendo音乐播放器研究与优化-AndroidManifest文件和Application类
【音的特性有四种:音高、音长、音量和音色】 --- 《五线谱基础教程》 Android项目的分析一般从AndroidManifest.xml文件开始,从这个文件我们可以一窥这个app定义的activity、service等四大组件的配置,以及使用的sdk版本和声明的权限等信息。 一 标签的顺序问题 首先使用Android Lint工具检查下这个配置文件,我们发现出现了一个l
2012-08-19 13:34:58 6621 6
原创 Android开源项目-Jamendo音乐播放器研究与优化-开篇
【Jamendo是一个音乐平台与社群网站。Jamendo上的所有音乐都使用Creative Commons授权或自由艺术授权,这使得任何人可以免费下载,而且复制与分享的行为都是合法的。根据所使用的授权类型,对歌曲进行修改或者商业使用也都可行。Jamendo允许使用者透过串流方式,以收听Ogg Vorbis或MP3格式的音乐,并能透过BitTorrent与eDonkey网络下载音乐档案。】 ---
2012-08-18 18:26:19 9463 4
原创 Android系统中长按事件的实现机制解析
在Android的触摸消息中,已经实现了三种监测,它们分别是1)pre-pressed:对应的语义是用户轻触(tap)了屏幕2)pressed:对应的语义是用户点击(press)了屏幕3)long pressed:对应的语义是用户长按(long press)了屏幕下图是触摸消息随时间变化的时间轴示意图:其中,t0和t1定义在ViewConfiguration类中,标识了
2012-08-11 21:33:55 4475
原创 Android面试题精选
问:怎样在Http连接中设置超时和代理?Http连接的超时机制能够防止连接线程的无限期等待,一般可分为connect timeout和socket timeout,在Android中可以使用HttpClient和HttpURLConnection建立Http连接,因此存在两种设置超时的方式,首先Socket等待建立连接的超时时间和Socket输入流等待数据到达的超时时间设置如下: priv
2012-08-11 17:12:20 4424
原创 Android代码中实现WAP方式联网
无论是移动、联通还是电信,都至少提供了两种类型的的APN:WAP方式和NET方式。其中NET方式跟WIFI方式一样,无需任何设置,可自由访问所有类型网站,而WAP方式,需要手机先设置代理服务器和端口号等信息,并且只能访问HTTP协议类型的网站。1) 移动的WAP名称是CMWAP,NET名称是CMNET;2) 联通的WAP名称是UNIWAP,NET名称是UNINET;联通3G的WAP名称是3
2012-08-08 16:52:14 15673 5
原创 Android中HandlerThread类的解析
Android应用中的消息循环由Looper和Handler配合完成,Looper类用于封装消息循环,类中有个MessageQueue消息队列;Handler类封装了消息投递和消息处理等功能。系统默认情况下只有主线程(即UI线程)绑定Looper对象,因此在主线程中可以直接创建Handler的实例,但是在子线程中就不能直接new出Handler的实例了,因为子线程默认并没有Looper对象,此
2012-08-06 15:56:06 3078 4
原创 百度贴吧布局框架的研究与实现(Android版本)
还记得几个月前刚接触“百度贴吧”这款应用时,瞬间就被它的悬浮式标题栏以及标签栏所吸引,虽然当时身边有个UI的MM说悬浮式一般都是具备隐藏的功能时才设计成这样的,一般情况下还是用直通式的好,在这里我也不讨论孰优孰劣,截取两个图,大家自己品味下。悬浮式标题栏和标签栏:(百度贴吧);直通式标题栏和标签栏:(QQ空间) 本文的目的就是研究下百度贴吧的这个标题栏和标签栏的实现原理;1、
2012-08-02 20:03:32 4473 1
原创 Android自定义状态栏通知(Status Notification)的正确实现
在Android应用开发中,经常会使用到状态栏通知(Status Notification),例如新浪微博、网易新闻等提供的推送消息,软件后台更新时进度的显示等等,如下图所示:看了网上很多关于Notification的博客文章,发现几乎没有一个能将自定义状态栏通知完全实现正确的,因此,本文就来说说实现自定义状态栏通知经常被忽略的一些知识点。1) 使用Notification
2012-07-30 16:39:54 23840 5
原创 Android应用中意见反馈功能的探讨与实现
很多Android应用的都提供了“意见反馈”功能,便于收集用户对该产品的建议,今天就来研究下现在市面上的“意见反馈”功能的实现形式,以91手机助手,网易新闻和布卡漫画为例,相应的有三种不同的形式:1)91手机助手(滚动型)主界面使用ScrollView实现,软键盘会覆盖界面下方的内容,需要滚动才能看到下面的输入框等信息,适合反馈界面信息量比较多的情况。同时在标题栏的右边有个客服答复按钮,能
2012-07-23 22:56:46 15340 6
原创 Android中PopupWindow自定义坐标实现
Android中PopupWindow位置的确定一般通过showAsDropDown函数来实现,该函数有两个重载函数,分别定义如下: public void showAsDropDown(View anchor) { showAsDropDown(anchor, 0, 0); } public void showAsDropDown(View anc
2012-06-02 22:27:55 14661 4
原创 Android事件处理的两种模型
UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理。对于基于监听器的事件处理而言,主要就是为Android界面组件绑定特定的事件监听器;对于基于回调的事件处理而言,主要做法是重写Android组件特定的回调函数,Android大部分界面组件都提供了事件响应的回调函数,我们只要重写它们就行。一 基于监听器的事件处理
2012-05-24 01:05:33 8269
原创 音乐随机播放算法
常见的音乐随机播放算法主要有两种:一是Shuffle算法;二是Random算法。一 Shuffle算法Shuffle算法和排序算法正好相反,是从有序到乱序的一个过程,俗称洗牌算法。它将播放列表中的歌曲顺序打乱,变成一个和原来歌曲顺序没有任何关系的乱序的播放列表,之后进行歌曲的播放,并支持当用户点击“上一首”时,能够回到刚刚播放的那一首歌曲。二 Random算法Random算法是
2012-05-19 13:31:20 9814 2
原创 Android各种开源项目源代码的下载方法(Subversion/Git/Mercurial)
开源项目几乎都使用版本控制系统来对代码进行维护,著名的版本控制软件有诸如CVS、Rational ClearCase、Microsoft Visual SourceSafe、Git、Subversion、Mercurial等等,数不胜数。当然上面有的是商业软件,有的是开源软件,对于我们单纯下载代码而言,其实没有多大区别,关键要看你需要下载的开源代码它是基于何种版本控制系统的进行维护的,本文就以Su
2012-02-27 21:50:43 4515
Linux防火墙
2012-03-14
Panoramio Android源码
2012-02-24
mvn jetty plugin 配置
2011-01-07
mvn 里面要依赖jar导出怎么做???
2011-01-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人