自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 问答 (1)
  • 收藏
  • 关注

原创 [Android] Preloader 预加载框架

简介Preloader是一个用于异步加载数据的工具。它提供同步或者异步的获取结果回调。适当地使用可让业务层获取数据的时间点提前。使用例子以简单activity跳转的例子为例,从MainActivity跳转到SubActivity。其中SubActivity的完整显示需要发起一次请求,获取到结果后显示在中央的textView。利用Preloader,我们可以在MainActivi

2018-04-03 16:44:39 2428

原创 [Android] 列表预加载工具类DataPreloader

DataPreloader用于实现列表数据预加载需求。注意这里的预加载是指预加载数据项的详细信息(例如预拉取视频列表里面某些视频的播放地址等),不是指预先拉取更多的列表项。概念说明加载窗口preload window:即需要发起预加载的项目的index区间焦点:即当前外围逻辑所关心的中心点的index,决定了区间的中心该工具类引入加载窗口的概念(由upperPosition和Lo

2018-03-29 18:28:21 1210

原创 [Android] 如何计算View的Size

** 注:本文参考链接How Android caculates view size本文例子如下所示:<LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextVie

2018-01-31 12:27:11 793

原创 [Android] 一种优化view inflate耗时的方法

做项目的过程中,发现一种一种优化view inflate耗时的方法,思路是预先将view inflate出来备用,用的时候直接取出来,同时再生成下一个(要考虑屏幕方向)。代码如下所示:用法大概如下所述:1. 在适当的地方调用push方法。2. 在使用view的时候,使用类似如下的代码: View view = ViewCache.getInstance().popAndAqu

2017-12-15 17:06:10 5857

原创 [Android] 解决因键盘和表情panel显示/隐藏引起的闪屏

在实现一些IM页面,例如对话框,评论框时,常常会遇到键盘和表情panel显示/隐藏引起的闪屏问题。问题的根本原因是当键盘收起或弹出时,layout会发生变化,此时panel的高度的计算如果时机不对,那么会导致闪屏。解决的办法有很多,这里提供一种重写onMeasure方法的实现:使用方法: mEditText = (EditText) findViewById(R.id.editT

2017-12-08 13:59:50 1446

原创 [Java] 异步case单元测试工具

有时候,需要对一些异步方法进行单元测试(尽管不推荐这样做),传统的assert只能在调用线程抛出AssertException,而测试框架往往只能监测主线程上的AssertException(JUnit),所以需要在主线程上等待异步调用结束,再去assert结果。利用Java8的CompletableFuture,我们可以很方便地做到这一点,代码如下所示:public class Asyn

2017-08-11 10:37:10 849

原创 [Gradle] 如何在android项目中对纯Java module使用release/debug build并启用proguard

如何在android项目中对纯Java module使用release/debug build并启用proguard?这里提供一种方法,尽管不是很“好看”,但是可用。假设app模块依赖lib模块,lib模块是一个纯Java模块(apply plugin: 'java')。整个过程可以分成两步。引入Proguard在lib模块的build.gradle里添加以下代码import p

2017-07-21 09:58:25 978

原创 [Java]Java Socket选项解析

Java里,Socket的Option由java.net.SocketOptions这个接口声明,如下所示:@Native public final static int TCP_NODELAY = 0x0001;@Native public final static int SO_BINDADDR = 0x000F;@Native public final static int SO_R

2017-07-14 17:53:39 805 1

原创 [Java] 一个不依赖Android环境的Handler

最近项目中遇到将android project转成java project的需求,要把项目中android相关的部分去掉。其中最纠结的就是如何替换handler。handler多用于指定线程(Looper)上执行回调,还可以当成一个消息队列使用。通过sendMessageDelayed可以做到事件的延时执行、条件执行和去抖(debouncing)。于是,我利用Java里面的ScheduledE

2017-07-12 12:59:11 627

原创 [vscode] markdown_index----可以为你的markdown标题添加序号的插件

markdown_indexmarkdown_index是一个可以为你的markdown标题添加序号的插件。假设原文如下所示:# afoolbar## a-bfoolbar## a-cfoolbarfoolbar### a-c-dfoolbar## a-efoolbar# ffoolbar安装markdown_index,运行 > markdow

2017-07-07 11:55:12 3020 1

原创 [Android] 如何在 Activity 或者 Fragment 的生命周期结束时停止订阅 Observable

NavUtil利用 NavUtil,你可以在 Activity 或 Fragment 的生命周期发生变化时,停止订阅你的 Observable。Usage首先,需要初始化 NavUtil 单例public class App extends Application { @Override public void onCreate() { super.

2017-01-23 16:45:41 1491

原创 [Android] PermissionUtil

UsagePermissionUtil.with(this) // Activity or Fragment .addPermission(Manifest.permission.CAMERA) .setCallback(new PermissionUtil.Callback() { @Override public void onPermiss

2017-01-03 15:07:47 1861

原创 [Android] PacketParser 二进制协议转换工具

这个工具通过自动生成解析类,实现了字节数组和对象之间的转换。使用@ParsePacket注解标注实体类:@ParsePacket( "header:1|cmd:2|len:2|seq:2|mac:6|data:this.len-6|check:1|tail:1")public class TargetObject { public byte header;

2016-08-26 17:58:45 1373

原创 [Android] Dagger2 入门 2

上一篇文章介绍了Dagger2的基本用法,这篇文章主要说一下Dagger2中@Scope和@Subcomponent这两个注解的用法和原理。@Singleton上一篇文章中提到: 如上面例子所示,如果要求D对象为单例,可以通过@Singleton注解来实现。首先我们需要在依赖图中声明对象是单例的: @Module public class DModul

2016-08-22 10:15:40 699

原创 [Android] Dagger2 入门 1

这篇文章主要谈一下本人在学习Dagger2的心得,如有错漏,敬请谅解。什么是依赖注入依赖注入就是把下面这样的代码:class A { public A() { }}class B { A a; public B() { a = new A(); }}class C { A a; B b;

2016-08-20 17:16:48 650

原创 [Android] TopSheetBehavior

将BottomSheetBehavior修改成从上方拉出的TopSheetBehavior,使用方法和BottomSheetBehavior一模一样,代码如下:未经严格测试,请谅解。查看原文:http://legendmohe.net/2016/06/26/android-topsheetbehavior/

2016-06-26 08:02:37 1436

原创 [Android] RippleDrawable

Ripple Effect的例子Github很多,这里我自做轮子,也实现了一个,效果如下所示:项目地址:https://github.com/legendmohe/RippleDrawable查看原文:http://legendmohe.net/2016/06/12/android-rippledrawable/

2016-06-12 16:39:40 920

原创 [Android] CircleView 仿小米空气净化器首页旋转UI

CircleViewDemo效果图如下:模仿并实现了小米空气净化器的主页旋转UI,动画效果比小米的流畅。查看原文:http://legendmohe.net/2016/05/23/android-circleview-%e4%bb%bf%e5%b0%8f%e7%b1%b3%e7%a9%ba%e6%b0%94%e5%87%80%e5%8c%96%e5%99%a8%e9%a6%96%e9%a1

2016-05-23 13:02:53 2811 1

原创 [Android] SlidingDrawableTabLayout

TabLayout with drawable indicatorUsagegradlecompile 'com.legendmohe.maven:slidingdrawabletablayout:0.1'codeJust use it as TabLayout:// Create the adapter that will return a fragment for each o

2016-05-20 11:07:47 839

原创 [Android] IntentInjector

做app的时候,经常遇到这样的需求:将数据放置在Intent中,再通过startActivity方法传给下一个Activity。常用写法如下所示:Intent intent = new Intent(this, StickyTabActivity.class);intent.putExtra("string", "sdsd");intent.putExtra("int", 101);int

2016-05-17 15:15:25 769

原创 [Python] 工作日查询脚本

智能家居中,经常要判断当天是否工作日。今日发现工作日的数据不正常,后来得知原来的api提供商已经开始收费(或者提高免费使用门槛),故自己写了一个,如下所示:注意,这个脚本不能直接判断给定的日期是否工作日。它会根据几个全局变量的设置生成一个“20**_date.txt”的文件。文件中每一行代表每一天的假日类型,2代表节假日(含连休调休等),1代表普通周六日,0代表工作日。数据生成以后,可以自己

2016-02-01 13:39:24 1993

原创 [Android] LogFilterM 发布啦

简介这是一个用于看androidlog的基于java swing的桌面软件。基于LogFilter开发。基本功能如截图所示:项目地址https://github.com/legendmohe/LogFilterM查看原文:http://legendmohe.net/2016/01/25/android-logfilterm-%e5%8f%91%e5%b8%83%e5%95%a6/

2016-01-25 11:19:41 975

原创 [Android] 简单的状态机实现

package com.lehome.statemachine;import java.util.HashMap;public abstract class State { HashMap mToStates = new HashMap<>(); @SuppressWarnings("unused") private String mName = "UNKNOW

2015-12-01 17:35:37 1206

原创 [Android] AsyncTask源码解析

常用例子本文依照以下常用例子展开:private class DownloadFilesTask extends AsyncTask { protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i

2015-11-18 13:11:31 757

原创 [Android] Otto源码简析

用例本文主要按照如下例子展开://1. 新建bus对象,默认仅能在主线程上对消息进行调度Bus bus = new Bus(); // maybe singleton//2. 新建类A(subscriber),answerAvailable()方法为事件回调,在主线程上运行class A { public A() { bus.register(this);

2015-11-11 16:47:19 922

原创 [Android] Handler源码解析 (Native层)

接前文[Android] Handler源码解析 (Java层),接下来对Handler机制在Native层上作解析。Java层的MessageQueue中有4个native方法:// 初始化和销毁private native static long nativeInit();private native static void nativeDestroy(long ptr);// 等待

2015-10-26 11:10:51 1100

原创 [Android] Handler源码解析 (Java层)

简单用例Handler的使用方法如下所示:Handler myHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { ... }

2015-10-23 11:49:00 797

原创 哪种遍历NSArray/NSDictionary方式快?

做app的时候,总免不了要多次遍历数组或者字典。究竟哪种遍历方式比较快呢?我做了如下测试:首先定义测试用宏:#define MULogTimeintervalBegin(INFO) NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];\ NSTimeInterval duration = 0;\

2012-08-02 17:30:55 2850 1

原创 MUBlockDelegate——一个基于Block的通用委托实现

1.通常我们这样用委托(Delegate):// 声明一个委托协议 @protocol TestProtcol - (NSString*) testDelegateMethod:(NSString*) aString; @end //实现一个委托协议 @interface TestDelegateImpl : NSObject @

2012-08-01 15:54:58 1755

原创 MUWork--一个基于Objective-c的AOP开发框架

先啥都不说,看一下MUWork的使用例子,让我们通过代码来感性地认识一下这是个什么东西。首先,你的程序里必须要有这些文件:然后我们声明一个类:#import #import "MUActionProtocol.h"@interface TestAction : NSObject {}@property(nonatomic, strong) N

2012-07-29 13:36:52 2730 2

原创 《Java程序员的推荐阅读书籍》 转

《Java程序员的推荐阅读书籍》 JavaEye (http://www.iteye.com) 范凯(http://robbin.iteye.com) 作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。 ...

2010-07-26 19:14:20 82

原创 java中的一些知识点

近段强化了java中的一些知识点(会涉及很多),明朗许多,现总结如下,一方面供朋友们参考,另一方面里面不足,错误的,希望朋友们指正完善善:一. Switch[u][/u] 1.其能接受的数据类型有四个,char , byte, short, int2.Default 可放在switch中的任何一个地方,但只有给定的条件匹配不到时,才会执行3.Case,default语句如果执...

2010-07-24 21:53:16 221

空空如也

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

TA关注的人

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