自定义博客皮肤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应用开发,每月会更新至少一篇,欢迎关注。

  • 博客(297)
  • 资源 (8)
  • 收藏
  • 关注

原创 使用Fragment完成Tab选项卡-Android Fragment应用实战

先看一下QQ、新浪微博、支付宝钱包这三个非常有名的应用,都有一个底部导航栏,我们一般称之‘选项卡’。google官方会叫他们为fixed tab,不过国内好像很好这么叫的。其实,在anroid 4.x时代,google官方更希望应用的导航放在顶部,通过滑屏和点击标签来切换界面。但是随着ios的的跟风以及用户习惯的养成,这种设计风格的形成也就变成历史遗留问题。在这里我们不讨论哪一个风格好,哪

2013-11-24 01:43:23 57628 31

原创 仿美图秀秀的图片剪切

先贴上美图秀秀原作的效果图,右边是我仿的效果图。刚一眼打量过去,吸引我们的就是那四个大点。就从它开始吧,目前看来这个大点是一个图片,当点击下去的时候有加亮的效果,可能这又是一张图片。我们先不要考虑这些,先把它当做一个普通的Point来处理就好了。正常来讲的话,我们这里需要四个Point,但是考虑到后面我们对这些点进行复杂的运算和事件处理,只要申请两个Point就好了,以便降低问题的复杂度。

2012-07-29 03:56:20 6937 6

原创 怎么样编写地道的Kotlin代码

今天我打算谈论一下怎么编写地道的(Idimo)Kotlin代码,『地道』意思就符合Kotlin代码的习惯。我今天要讲的是如何摆脱Java编码习惯,开启你的Kotlin的编码风格。

2021-12-09 10:06:46 1116

原创 走进微软亚洲研究院随笔

——说起微软,应该是我最早了解科技公司。大约我是在上初二的时候(也就是2005年)买了人生第一个台式Window系统电脑,后来的日子里我就开始学习和研究它,发现很多神奇有用的功能,慢慢的电脑和Window系统成为了我生活的一部分。——时隔N年之后,有一个偶尔的机会通过CSDN官方组织的活动,来微软亚洲研究院参观,我很是兴奋,毫不犹豫的报名参加了。这个是2021年11月24号中在北京中关村微软大厦拍摄的这是非要和我一起过来的『甜甜』这个微软公关部的Leader和CSDN的VP给大家介绍今天的日程

2021-11-28 12:15:07 3970 4

原创 Android的开发文档规范

Android的开发文档规范我们项目的代码时间时间很长,经过太多人手,代码的规范性堪忧,目前存在较多的比较自由的「代码规范」,这非常不利于项目的维护,代码可读性也不够高。分析现有项目的代码的情况,输出的『定制化规范』文档,用于提高代码的可读性和可维护性。目的对于个人:帮助团队写「正确」的代码,提升编程能力。团队内部:统一项目的编码风格,降低维护『非自己模块』的成本对外部门:交付更加稳定的产品,并降低后期的维护难度准备及通用开发工具配置规范工欲善其事,必先利其器。推荐使用最新的稳定版

2021-03-08 19:25:59 839

原创 LoadedApk Crash的探索之路

LoadedApk Crash的探索之路Bug成因分析,问题定位Crash 现场起因是:在工作中遇到两个奔溃堆栈日志,如下图:初步分析这个Crash发生在第三方SDK中,是由SDK内部触发,不是通过直接调用产生的,并且难以复现。本来这个问题应该由SDK提供方来解决,但是用户不管这些,需要我们APP自己来解决。我在华为手机上也遇到这个问题了,没有页面发生奔溃,但是也没有从根本上避免...

2019-10-13 17:50:39 780

原创 layout_scrollFlags属性不完全解析及总结

layout_scrollFlags属性不完全解析及总结0.前言分析源码com.android.support:design:27.1.1库的android.support.design.widget.AppBarLayout.java现在只是简单分析向下滑动的情况,当dy为负数。这里的min和max就是通过setTopAndBottomOffset方法对AppBarLayout的滑动范围进...

2019-08-03 13:08:03 1946

原创 小试牛刀RxJava2之首页检查

前言当我第一次听说RxJava是在2015年的11月,掐指一算距今过去了N年多了,现在RxJava2都发布好久了。现在公司项目的的业务需要,有一块逻辑涉及到子线程和主线程的来回切换。如果使用传统的Thread+Handler的写法,写出来的代码就跳来跳去,还有可能出现多次嵌套。很利于阅读理解里面的逻辑和后期的维护开发。早就听说RxJava的大名,通过响应式编程很好的处理异步问题。这次正好有这个机...

2019-07-13 17:52:18 237

原创 无侵入进行SDK的初始化

无侵入进行SDK的初始化0.前言我们在集成第三方SDK的时候大多都会在Application的onCreate方法里进行SDK的初始化或配置工作,这好像也没有什么问题,不过我们能不能能做的更好一点呢?就是希望用户在gradle文件里compile一下相应的库就可以直接使用,不需要额外的初始化和配置.这个问题,我在阅读Android Architecture Components

2017-07-01 09:29:31 5223 4

原创 深入焦点处理流程

深入焦点处理流程dispatchKeyEventfindFocusfocusSearchrequestFocus

2017-06-19 18:54:29 2333

原创 搭建本地maven仓库实战

搭建本地maven仓库实战

2017-05-03 16:36:47 2099

原创 还有一鲜为人知的单例写法-ThreadLocal

还有一鲜为人知的单例写法-ThreadLocal源码范例当我阅读FocusFinder和Choreographer的时候,我发现这两类的单例实现和我们平常用双重检查锁很不一样。而是用来一个ThreadLocal,这个也可以实现单例啊,那这个与双重检查锁实现的单例有什么区别呢?

2017-04-01 18:46:47 6617 3

原创 setButtonDrawable()的兼容问题

setButtonDrawable()的兼容问题

2017-03-11 23:19:26 3374 2

原创 Activity has leaked window that was originally added

Activity has leaked window that was originally added问题日志相信很多同学都遇到过这个问题window leak。日志如下E: android.view.WindowLeaked: Activity me.zhangls.rxjava2sampledemo.MainActivity has leaked window com.android.inte

2017-03-03 10:10:04 4210

原创 android.app.Dialog(23)里window的那些事(坑)

不要使用theme去配置Dialog的gravity由于现在手机的尺寸比较大(相对于智能机开始的3.5in、4.0in),而Dialog默认都是显示在屏幕中心的位置,用户触摸起来多不便。所以大多数产品都会要求Dialog在底部显示。所以你可能这样写: <style name="BottomDialog" parent="@android:style/Theme.Dialog">

2017-02-03 10:09:02 6456 2

原创 Volley的缓存策略

使用分析的库为:com.mcxiaoke.volley:library:1.0.19

2017-01-21 20:36:15 1306

原创 小试牛刀RxJava2之首页检查

前言当我第一次听说RxJava是在2015年的11月,掐指一算距今过去了1年多了,现在RxJava2都发布了。现在公司项目的的业务需要,有一块逻辑涉及到子线程和主线程的来回切换。如果使用传统的Thread+Handler的写法,写出来的代码就跳来跳去,还有可能出现多次嵌套。很利于阅读理解里面的逻辑和后期的维护开发。早就听说RxJava的大名,通过响应式编程很好的处理异步问题。这次正好有这个机会,自己

2017-01-14 19:12:58 1733

原创 如何监控项目里所有UI线程的操作(实战,BlockCanary)?

如何监控项目里所有UI线程的操作(实战,BlockCanary)?背景我们都知道,Android系统是线程安全的,也就是只有主线才能更新UI。而保持界面的流畅性,就要求界面1秒钟刷新60次以上。也就是16ms需要刷新一次界面。但是在实际开发过程中,有各种各样的原因,无法达到这一指标。尤其是当项目已经成形,需求的不断变更,开发人员的变更、替换,等等,就变成的更为困难。

2016-07-08 11:27:24 4525 4

原创 获取Application的Context

获取Application的Context

2016-07-06 16:20:47 4043

原创 Activity及Fragment之间的跳转

直接跳转基本使用方法public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(

2016-05-09 16:53:14 3804

原创 Gson使用总结

参考(不限于):http://www.jianshu.com/p/e740196225a41.使用@SerializedName,处理客户端与服务端字段明命名不一致@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})public String emailAddress;2.使用TypeToke

2016-04-07 15:06:48 2951

原创 手把手教你使用gradle mulchannel插件,进行多渠道打包

手把手教你使用gradle mulchannel插件,进行多渠道打包开头声明: 这个多渠道打包插件,是使用命令行来运行的。不依赖任何IDE的,你的开发环境是Eclipse还有Android Studio都是可以的。不需要APK的源代码,仅仅需要一个打包好的APK就可以。(一般是正式版本的并且已经签名和混淆的APK文件)。速度大约是:Rate = 10apk/20sec(300apk/10min)

2016-01-04 19:29:18 2226

原创 Volley异常的介绍

异常种类(VolleyError)ServerError的情况1.entitiy为空InputStream in = entity.getContent(); if (in == null) { throw new ServerError(); }2.返回5xx// TODO: Only throw ServerError for 5xx status codes. throw ne

2015-12-20 17:38:44 2162

原创 下拉刷新及相关框架

下拉刷新及相关框架1.基于ViewGroup的PtrFrameLayout项目地址:https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh问题:PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header)实现问题 2. 竞品: https://githu

2015-10-31 17:21:06 2847

原创 Android Universal Image Loader

问题:在onCreate调用uil的displayImage,手动刷新时再次调用displayImage,会出现图片闪烁现象。问题分析:第二次displayImage,是从disk加载的,首先显示正在加载中的图片,然后在显示真正的图片,由于disk读取bitmap也需要一点时间,但是很快,所以会出现一闪而过的现象。根本原因:见uil源码,由这段源码可知memoryCacheKey的生成与image

2015-09-29 16:13:38 1796

原创 自定义Gradle插件之"Hello World"

自定义简单的Gradle插件和任务手把手一步一步自定义简单的gradle插件

2015-08-23 17:12:25 4384

原创 android的消息处理机制(图+源码分析)——Thread,Looper,MessageQueue,Message,Handler之间的关系

原文参考:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html  先看一段非常经典的代码,我们从会这里入手,慢慢分析源码去找这五个类的相互关系,以及消息封装,消息入队,消息出队,消息处理整个过程。

2014-02-28 20:17:18 3032

原创 android studio之代码重构

在我们不停地编写项目代码的时候,就会慢慢地发现代码有各种各样的问题,

2013-11-17 22:11:11 3681

原创 自总结的Android Studio快捷键大全

File(文件)Alt+Insert  新建Ctrl+Alt+S 设置Ctrl+Alt+Shift 项目结构Edit(编辑)Ctrl+Z 取消这步Ctrl+Shift+Z 重做这步Ctrl+X 剪切Ctrl+C 复制Ctrl+Shift+C 复制文件路径Ctrl+Alt+Shift+C 复制引用Ctrl+V 粘贴Ctrl+Shift+V

2013-10-25 23:37:35 3751 2

原创 从Eclipse到Android Studio经历

现在不得不要和相处近两年的Eclipse分手了,很舍不得,谢谢你这些日子有你的陪伴,每天都会有些的期待和挑战。两年来,我们建立了很深厚的情感。曾经以为我的世界只能有你,而现在我的心里可能有了别人。起初我是不死活不同意的,但是碍于Google的压力,还有众人的舆论。使我不得不陷入思考和新的尝试。早在今年5、6月分份,Google就和我提过Android Studio,说她怎么怎么的好,怎么怎么的

2013-10-13 01:45:50 2937 4

原创 利用自定义泛型,自己简单实现HashMap

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。(来自百度百科)实现步骤1.首先HashMap表面保存的是Key和Value,但是实际上保存的是一个个的Entry,而Entry里面是Key和Valuepublic class MyEntry

2013-04-24 00:25:34 4411

原创 使用listener显示在线人员的姓名

显示在线人员的思线1.服务器一启动就创建一个List名字叫onlinePersion,放在application中    (监听application)public class MyApplicationListener implements ServletContextListener { public void contextDestroyed(ServletConte

2013-04-23 00:22:13 1890

原创 模拟售票,学习多线程

假设有火车票100张,创建10个线程模拟10个售票点,每个售票点随机生成时间卖一张票。 打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。import java.text.SimpleDateFormat;import java.util.Date;public class Resource { int ticketNum; boolean flag = f

2013-04-21 23:51:12 2501 2

原创 android 动态获取ID通过Resources的 getIdentifier 方法

public int getIdentifier(String name,String defType,String defPackage)Added in API level 1Return a resource identifier for the given resource name. A fully qualified resource nam

2013-04-12 21:47:19 2022

翻译 Service类

Service类简介:  一个Service是一个应用组件代表一个应用想要在不和用户交互的前提,去执行一个很长时间的操作。或者是提供功能给其他的应用去使用。每一个Service类必需有一个相符合的声明在它自己的包AndroidManifest.xml中。Service能够开始执行通过Context.startService()和Context.bindService().      注

2013-03-31 15:05:21 3976

原创 sqlite插入速度优化方案

先贴上SQLiteOpenHelper的代码,我们创建测试的表是user,它有四个字段id,name,age,height,remark,测试用的小米2,默认条数为100行。//MySQliteOpenHelper作为一个访问SQLite的帮助类,提供两方面的功能//1.getReadableDatabase(),getWritableDatabase()可以获得SQLiteData

2013-03-30 21:24:26 4624

原创 SQLite实例入门

SQLite简介:Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:  1.轻量级  使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。  2.独立性  SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

2013-03-30 18:39:40 1535

原创 自己实现第一个ContentProvider

一、概念及说明ContentProvider定义:内容提供者是一个android应用的基础模块,提供内容给这个应用,它们封装数据和提供它给应用通过这个ContentResolver接口,使用ContentProvider可以在不同的应用程序之间共享数据,android为常见的一些数据提供了ContentProvider(视频、音频),ContentProvider使用表的形式来组织数据

2013-03-30 10:31:20 1314

原创 CSS(级联样式表)概要

CSS的作用给HTML中的内容像word一样来排版。的相同点和不同点?相同点:都是给网页的内容划分不同的区域不同点:div换行,span不换行id name class 所有标签有这个三属性,这三个属性都是给标称起名字的。一般来说,form表单中的元素都用name,其他的我们一般用id和class。id不能重复class能重复。都有标签都有syle,style就是样式。

2013-03-26 22:08:56 1595 2

原创 java web 重点

cookie与session、application的区别? 答:1.cookie保存在客户端,cookie只用于保存字符串。可以有两种形式保存,一种是保存到客户端的内存里,另一种是保存到客户端的文本里。用cookie.setMaxAge(expiry);区分两种保存状态。不设置这个时间,则代表保存到内存里。设置这个时间则以文件的形式保存。可以通过response.addCookie(cook

2013-03-20 21:33:39 1671

fragment实现选项卡界面

在android 2.x时代,我们可能会地使用ActivityGroup来实现这种,但是随着jelly bean的市场份额超过50%,我们会发现有一种新的组建出现了,它叫Fragment(http://developer.android.com/reference/android/app/Fragment.html)。而这种底部选项卡的风格界面的实现也由ActivityGroup转向了Fragment。先了,费话不多说了,下面我会一步一步教您怎么实现这个界面。在动手之前,我可能需要把我做好的样式图给你看一下,以遍让您有一个心里预期。

2013-11-24

显示在线人员

显示在线人员

2013-04-23

sqlite入门实例

sqlite入门实例

2013-03-30

仿美图秀秀裁剪

仿美图秀秀裁剪

2012-08-18

游戏手柄代码

游戏手柄代码

2012-03-29

妖怪与和尚过河问题

妖怪与和尚过河问题

2012-03-19

Android.in.Action.2

Android学习,学习Android Android学习,学习Android Android学习,学习Android Android学习,学习Android

2011-06-26

C-FREE 5.0

C-Free是一款支持多种编译器的专业化C/C++集成开发环境(IDE)。利用本软件,使用者可以轻松地编辑、编译、连接、运行、调试C/C++程序。C-Free中集成了C/C++代码解析器,能够实时解析代码,并且在编写的过程中给出智能的提示。C-Free提供了对目前业界主流C/C++编译器的支持,你可以在C-Free中轻松切换编译器。可定制的快捷键、外部工具以及外部帮助文档,使你在编写代码时得心应手。完善的工程/工程组管理使你能够方便的管理自己的代码。 主要包含如下特性: 支持多编译器,可以配置添加其他编译器; 目前支持的编译器类型:

2011-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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