自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 并发安全的Adapter

问题Adapter的数据自己要用于getView和getCount,而且程序是getCount后在不同方法里面连续getView,这带来个问题:getCount后,数据被其他线程删除,在getView的时候越界解决思路建立一个ConcurrentAdapter,里面用两个List存储数据,一个是外部操作增删用,一个用来实际绘制用。当外部增删后,暂时不改变内部的List,这样就不会出现越界当内部

2015-04-07 19:54:06 771

原创 在Android上用MVP模式编程的实践

首先,谁是V?谁是P?(M我认为不是问题)View,应该是实现显示逻辑,在Android开发中,我们认为Fragment、Activity都可以被当做View,他们主要任务就是控制显示逻辑,这部分代码不太经常重用。View通过调用P的业务逻辑,来实现业务。业务包括同步的业务(可以在UI线程操作)和异步的任务(如网络、磁盘IO等耗时操作),并根据P的业务返回结果来响应地改变UI。对Presenter的

2015-04-07 19:48:11 841

原创 巧用Logcat把日志记录到文件

在一些开发阶段,产品已经小部分分发出去,在出现问题的时候,我们希望用户能把当时的Logcat日志也发过来提供给程序员进行分析,这里介绍一个巧妙利用logcat命令行进行日志记录的方法,不用自己写日志记录的代码。Android的shell里面提供个logcat的命令,是用来查看系统日志的,这个命令同时支持日志过滤、日志记录到文件,并支持自动日志文件滚动、控制日志文件大小。因此,我们在系统启动的时候,用

2015-02-25 17:34:19 2191

原创 基于AndroidAnnotations的一个MVP模式的扩展

GitHub地址

2015-02-10 16:08:46 881

原创 扩展AndroidAnnotations使用MVP模式编程

上代码 Activity实现一组接口,用来对View进行操作public class MainActivity extends Activity implements TestView{//MVP中的P,一个View可以有多个P,实现多组业务逻辑,比如在主界面还需要读取Conversation 的内容@Bean(TestActions.class)ITestActions testActio

2015-02-05 21:15:00 1089 1

原创 Activity被销毁重建后Fragment的处理

1、用onSaveInstanceState方法保留Activity状态。2、在onCreate方法里面处理保留的状态数据protectedvoidonCreate(BundlesavedInstanceState) {3、在放入Fragment的时候,加上TAG,在Activity restore后,用TAG把Fragment用findFragmentByTag读取出来。

2015-01-20 16:57:26 2597 1

原创 使用AWS的CloudFront、Route53等服务

注册AWS服务后,邮箱会收到一封信,标题如下:Action Required: AWS Account Alert内容是让你发一个有效的网址过去,这样才能使用CloudFront、Route53等服务。如果没有开通,点击这些服务的时候,就会出现:Your service sign-up is almost complete 这样的信息。出现这个信息后,我们提交了工单,几天都没有

2015-01-19 10:48:28 4064

原创 用Ant在编译时删除Debug代码

程序中有很多打印Log的测试代码,在Deploy的时候最好删除,Java不支持宏定义,可以尝试用ANT脚本来做。步骤如下:1、把代码复制到一个新目录2、用Ant的replaceregexp任务,对下面的Java代码根据正则表达式删除Debug代码3、用ANT对清理过的工程进行编译打包。需要程序员对Debug信息的输出统一格式,比如统一一个静态方法调用。

2015-01-13 22:31:06 1061 1

原创 Android ListView避免在GetView时数据发生变化导致找不到元素的Bug

ListView在GetCount返回30,这时系统正在GetView,另外的线程这时改变了List中的数据,比如删除一个,会导致indexOutOfBound。解决方案是:在getCount的时候,把数据复制到另外一个List中,之后的getView都从这个复制的List获取数据。

2015-01-13 22:27:59 830

原创 一个高效的Android GIF播放器

特点:整个应用只用一个线程播放所有GIF可以把GIF直接放到ListView或者RecycleView中,性能没有问题。当没有GIF播放的时候,线程wait住GitHub地址 https://github.com/bobdeng/androidgif

2015-01-05 20:44:15 1214

原创 用AndroidAnnotation简化Android开发

AndroidAnnotation是一个通过Annotation对代码进行预处理,简化Android开发,加快开发速度,提高代码可阅读性的一个框架。它的主要思路是:用编译时Annotation对代码进行标记,通过Java的Annotation Processing对代码进行预处理,补齐代码。如FindViewById这样重复被使用的代码,可以通过在类成员上加上@ViewById(R.id.xxx)

2015-01-05 15:13:33 719

原创 Android使用Buffer提高相机的处理能力

Android上使用相机的的Preview的时候,如果不使用Buffer,相机程序会反复创建销毁Byte数组,造成系统频繁垃圾回收,非常影响体验,这时可以用Buffer来进行处理。首先,在调用相机的回调时,用如下代码:for (int i = 0; i < 3; i++) { camera.addCallbackBuffer(new byte[((previewWidth * pr

2015-01-05 15:02:46 1051

原创 Android上如何确保消息被推送到

一般情况下,可以侦听一些经常发生的消息,如电量变化、开关屏幕、网络切换等等,注册BroadcastReceiver来接收消息,接收到后启动推送消息的Service。现在有些厂商的ROM,一旦用户主动杀掉了进程,则不再投送广播消息给应用,导致应用无法启动,在这种情况下,可以用C Fork出来一个进程,检查主进程是否被杀,一旦被杀,立即调用shell命令启动Service,这个做法稍微流氓了一点,

2015-01-05 14:46:28 748

原创 Android下面第三方类库资源文件的加载

有些第三方类库是基于J2SE开发的,内部有资源文件,如properties,这些文件在dex编译的时候会被过滤掉,导致类读取资源的时候无法访问。解决办法是用运行时加载第三方类库。1、用DX打包第三方类库2、把打包后的DEX文件和带目录结构的资源文件,压缩到classes.zip文件里面3、对Classes.zip进行运行时加载。加载方法见上一个博客

2014-12-03 12:41:44 1128

原创 Android对第三方类库运行时加载

首先,把需要运行时加载的类库,放到项目的其他目录,如新建一个thirdlibs的目录。然后用dx命令,对下面的类库进行压缩,做成dex文件。dx --dex --output=../assets/ *.jar这会在assets下面生成一个classes.dex文件,压缩成classes.zip文件。新建一个类,用来加载类库package me.chatgame.mobilecg;

2014-12-02 20:39:28 3633 2

原创 使用ANT编译超过64K方法的Android工程

Android编译的DEX文件最大允许64K个Method,超过了可以用multi-dex来实现,不过Google不维护Ant部分的代码了,需要自己手工改一下。1、修改SDK\tools\ant\build.xml      在dex-helper 下面的dex,增加:multidex="true"      由于当前的AntTask并不支持Multidex,因此需要修改ANT的T

2014-12-02 15:25:16 2845 5

原创 Android更新系统相册

图片保存到SD卡后,通过如下方式通知系统更新相册:    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);    File f = new File(path);    Uri contentUri = Uri.fromFile(f);    mediaScanIntent.s

2014-11-12 22:47:30 976

原创 Hoststool使用教程

第一步,选择服务器,如果不行,可以换换服务器试试看,我用seattle可以的。第二步

2014-10-23 11:19:42 3703 1

原创 基于AndroidAnnotation扩展的一个异步调用框架

用法介绍首先 @EAction(action=ActionImpl.class) public interface IAction{ @Invoke public void doSomething(String name); @Invoke public void doSomethingPriority(String name,int priority);

2014-09-04 14:54:48 641

原创 在阿里云RDS下面使用中文全文检索

目前阿里云的RDS并不支持中文全文检索,我也

2014-04-14 14:43:35 2229

原创 Centos下配置使用私钥文件登陆

一、在Centos服务器上,生成秘钥对文件。> ssh-keygen -t rsa

2014-04-14 14:37:00 1285

原创 Nginx通过KeepAlive提高HttpProxy的转发效率

在location里面增加proxy_http_version 1.1;        proxy_set_header Connection "";

2014-04-09 14:17:50 974

原创 Cassandra下的Rang查询

1、第一个Key不能使用Range,只能用In 或者等于2、一般的,在对后面的Key做Range查询,这个Key前面的Key,必须用等于限定,否则效率非常低。比如 primary key (user_id int ,logtime int);        select * from userlog where logtime>1000 allow filtering; 效率可能非常低

2014-03-18 14:56:55 689

原创 通过ADB控制多台Android设备

在PC上可以通过adb命令控制多台android设备,但国内有些厂商,由于某种原因,设备的ID都是一样的。比如你同时插入2台设备,他们ID都是123456,那么对后面的ADB命令,就无法区分操作哪个设备了,我的解决办法是:修改adb源码。安装Ubuntu系统,按照Google教程下载Android源码,找到adb代码,在得到DeviceID的部分,将DeviceID后面加上一个系统的顺序号,来

2014-02-14 11:49:06 5197

原创 通过InstrumentDriver用Eclipse的JUnit对IOS程序进行测试

摘要InstrumentDriver是Taobao开源的一个IOS自动化测试框架。它通过JUnit,利用Apple的Instruments进行IOS程序的自动化测试,JUnit的代码看起来比Instruments的JavaScript更简单,完全兼容JUnit的风格,是IOS的App自动化测试的利器。环境需求Instruments必须运行在MAC环境下,所以机器必须是MAC的机器。

2014-02-14 10:53:57 1403

空空如也

空空如也

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

TA关注的人

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