
移动开发
赵小刚
系统架构师
展开
-
基于手机端的常见轻量级服务器通信架构
1.XML+ HTTP这种通信方式,在即时通信协议xmpp采用较多,podcast、等其它rss资源也普遍采用这种方式;该方法的好处是服务器端业务和接口设计会更加清晰和简单;2.JSON+ HTTP现在最主流和普遍的一种,手机端和服务器交互方式;该方法的好处是较第一种方法更省流量,但是接口设计和参数传递相对来说要麻烦些;3.Protocol Buffer + HTTPP原创 2012-11-21 16:49:38 · 4028 阅读 · 0 评论 -
在android上实施不会OOM的内存管理方案
很多人埋怨在android上当listview里面加载大量图片,并且还有其它页面加载比listview里面更大的图片,大量不同类型的图片在一起,又要兼顾用户体验,这个时候应用程序就经常OOM,让人好不烦恼。下面是2种经过压力测试还能很坚挺的方法,供大家参考,指正: 方案一.简单链表+软引用管理方式1.定义一个单实例的类(e.g. EstoreCacheManager),用饿汉方式初始化原创 2011-10-31 15:08:19 · 3604 阅读 · 0 评论 -
android高手成长之路--Tools之FindBugs
可能很多朋友都看过金庸先生的《倚天屠龙记》,里面的倚天剑和屠龙宝刀那是何等的威风。给我们的启示是好的利器在手,胜过百万雄师。 对于开发人员也一样,好的工具能让我们事半功倍之余更能提升我们的境界和把握住软件的健壮性。因为,我们可以通过一些工具生成数据和报表,这些也是客户喜欢看到的。 第一个工具,我们先来看FindBugs。(因为我们的错误通常分为两种,静态错误和动态错误也就是运行时的原创 2011-10-13 12:31:08 · 3430 阅读 · 0 评论 -
编译apk时出现“Error conversion to Dalvik format failed with error 1”的解决方法
1.修改[Android SDK Installation Directory]\tools\proguard\bin\proguard.bat 将call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %* 改成 call %java_exe% -jar "%PROGUARD_HOME%"\lib\progu原创 2011-09-21 12:47:12 · 4767 阅读 · 0 评论 -
对IntentService的几点看法
网上讲解IntentService使用和原理的文档很多,我在这里就不再赘述。在这里,我想换个角度,说一下它的适用范围(scope),即在什么情况下最好使用IntentService,而不是其它的组件。更新客户端自身版本;需要在后台执行的单任务;多个能够容许异步执行的后台任务(即不需要同步执行,对时间和顺序要求不强的); 对于上面3种情况,其实很好理解,原因如下:Intent原创 2011-09-26 14:26:36 · 5883 阅读 · 0 评论 -
android上一个可追踪代码到函数具体某行的日志类
代码如下:package xiaogang.enif.utils;/** * The Class LogUtils for log printing, which help us * easy to trace our codes or logics in the project . * * @author zhao xiaogang * @time 2011.4.12原创 2012-11-19 11:02:06 · 4214 阅读 · 4 评论 -
最简洁的方式(最少的代码)在Android上实现IOS的switch button
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;im原创 2012-11-15 15:48:11 · 8022 阅读 · 1 评论 -
处理The content of the adapter has changed but ListView did not receive a notification异常
ListView在更新时报异常:ERROR/AndroidRuntime(15260): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapte原创 2012-11-14 16:51:24 · 7320 阅读 · 9 评论 -
实现手动触摸和自动无限循环的gallery
UI效果先上代码再说事:package xiaogang.zhao;import xiaogang.zhao.R;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Messa原创 2011-11-04 16:30:09 · 6379 阅读 · 8 评论 -
button在底部的多个view切换优化之<实例二3D切换>
在" href="/androidzhaoxiaogang/article/details/6798805">button在底部的多个view切换 代码结构不甚合理,也不利于实现我后面计划实现的另外一个功能,先这里抛砖引玉一下--及通过touch屏幕,也可以实现3D切换。经过考虑之后,决定将代码重构为:1.将View的操作借助一个单实例的MainViewmanager分离开来;2.实现真正原创 2011-09-27 12:50:38 · 1381 阅读 · 0 评论 -
编写高效的Android代码
对于占用资源的系统,有两条基本原则:不要做不必要的事不要分配不必要的内存所有下面的内容都遵照这两个原则。有些人可能马上会跳出来,把本节的大部分内容归于“草率的优化”(xing:参见[The Root of All Evil]),不可否认微优化(micro-optimization。xing:代码优化,相对于结构优化)的确会带来很多问题,诸如无法使用更有效的数据结构和算法。但是在翻译 2012-11-24 21:36:57 · 1232 阅读 · 0 评论 -
Android网络开发中出现NoHttpResponseException 或者ClientProtocolException解决方法
方法实在是很简单, 为你的httpclient添加一个retry handler就ok了。代码如下: HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() { @Override public boolean retryRequest(原创 2012-11-06 16:27:52 · 11271 阅读 · 6 评论 -
OpenDMTP协议参考指南
1)介绍本手册讲述了OpenDMTP包结构、状态码,并定义了在使用本协议的所需要的一些属性。这个协议目前不包含专用服务器的错误代码、客户端错误代码或者是自定义事件字段类型(需要自定义事件包协商)的定义。关于这些问题的技术细节,手册所使用的头文件可以在OpenDMTP C语言开发包中找到。下面的头文件,我们可以认为是本文档的一部分:翻译 2011-10-28 12:53:24 · 1973 阅读 · 0 评论 -
DataGramSocket是否线程安全
(1) DatagramSocket的读写是互相独立的。 (2) DatagramSocket 写是原子的,因此是线程安全的。 (3) DatagramSocket reads读是异步的,在OS层面上也是原子的,因此也是线程安全的 。原创 2011-10-20 10:58:34 · 2369 阅读 · 1 评论 -
android上使用Soap协议的简单实例
话不多说,先上代码:package XXX;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTranspo原创 2012-11-18 14:09:46 · 10180 阅读 · 1 评论 -
android上的一个网络接口和图片缓存框架enif
1.底层网络接口采用apache的httpclient连接池框架;2.图片缓存采用基于LRU的算法;3.网络接口采用监听者模式;4.包含图片的OOM处理(及时回收处理技术的应用); 图片核心处理类:CacheView.javapackage xiaogang.enif.image;import java.io.FilterInputStream;import java原创 2012-11-22 12:41:57 · 11856 阅读 · 3 评论 -
android应用架构设计目录
1.架构和数据、UI展现息息相关;1)数据居多2)图片居多3)数据和图片相当2.架构和网络流量;1)图片尽量只从网络获取一次(图片变化不频繁)2)当有新的时再获取3.架构和业务灵活扩展(大的项目或者说是产品,会不断维护的);1)保证新功能的扩展始终很容易2)不需要修改其它模块4.架构和性能(代码本身的质量、流畅、省电、省流量);5.架构和原创 2012-03-14 14:12:07 · 2928 阅读 · 1 评论 -
使用LRU算法缓存图片
在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了。在很多情况下(例如使用 ListView, GridView 或者 ViewPager控件),显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片)。在这些控件中,当一个子控件不显示的时候,系统会重用该控件来循环显示 以便减少对内存的消耗。同时垃圾回收机制还会释放那些已翻译 2012-08-27 00:30:12 · 12596 阅读 · 7 评论 -
android上如何实现后台日志记录并写文件到sd卡
原因分析什么时候需要将我们的日志写到文件,并存储起来查看呢,我总结一下大概有几种情况:1.debug alarm manager 启动的service,你想要知道是否每一次service的执行都正常,一切都是按照你所想的;2.一些重要的信息,需要保存起来做分析或者需要上传到服务器做分析的;3.开发期间,了解各个主要是网络接口的工作状态,执行效率(每个接口的执行时间)等等;过原创 2012-09-06 00:08:56 · 17172 阅读 · 0 评论 -
AndroidManifest.xml文件
一、关于AndroidManifest.xmlAndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent翻译 2011-09-26 14:45:22 · 903 阅读 · 0 评论 -
通过Dalvik加载自定义类(而不是从默认的dex文件里面去加载)
Posted by Tim Bray on 28 July 2011 at 8:35 AM[This post is by Fred Chung, who’s an Android Developer Advocate — Tim Bray]The Dalvik VM provides facilities for developers to perform custom cl原创 2012-03-11 23:32:07 · 1730 阅读 · 0 评论 -
Android.mk文件
Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中 列出头文件和依赖文件。NDK编译系统将会为你自动处理这些问题。这也意味着,在翻译 2012-11-26 21:27:20 · 5657 阅读 · 0 评论 -
android中最常见处理异步任务的组件
1.主线程中handler可以实现异步(但此处不宜将将耗时的操作直接放handleMessage里面处理,可以post一个Runnable);2.非主线程通过Handler+Looper实现异步;3.AsyncTask实现异步;4.AsyncQueryHandler实现异步;5.IntentService实现异步;6.HandlerThread+Handler实现异步;7.原创 2012-11-11 12:04:27 · 2734 阅读 · 0 评论 -
组合android的theme属性
发觉很多人都在问一个问题,就是如何将android:theme="@android:style/Theme.Dialog"和android:theme="@android:style/Theme.Light"属性组合起来用来呢?方法其实很简单,就是将Theme.Light设置为的application属性,而Theme.Dialog则设置为Activity的属性:原创 2011-10-13 12:51:56 · 3445 阅读 · 0 评论 -
button在底部的多个view切换<实例三触摸和点击实现3D切换>
在这个例子里面我实现了多个view在切换时同时支持手势和点击底部的button,纯UI的东西,除了设计模式,没有什么原理可讲,上代码。1.MainActivity.java:package com.isomobile.widgets;import android.app.ActivityGroup;import android.os.Bundle;import android.vi原创 2011-09-28 14:03:28 · 1315 阅读 · 0 评论 -
Android官方文档翻译--How Android Draws Views
Android如何绘制视图当一个activity接收到焦点的时候,它将会被要求绘制界面布局。Android的framework将会处理绘制的过程,但是activity必须提供布局层的根节点。绘制是从布局层的根节点开始的。它要度量和绘制布局树。绘制是通过遍历整个布局树然后渲染那些交叉于无效区域的视图。反之,每一个view group负责请求它的孩子进行绘制并且每一个则view负责自身。由翻译 2011-09-26 16:04:34 · 2454 阅读 · 0 评论 -
获取window状态栏和标题栏的高度
1.获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。于是,我们就可以算出状态栏的高度了。 Rect frame = new Rect();getWindow().getD原创 2011-09-27 10:33:46 · 4804 阅读 · 2 评论 -
android下实现英汉(汉英)排序的简单实现
1.引入frameworks/base/core/java/com /android/internal/util/HanziToPinyin.java文件到你的工程里面:/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (原创 2012-10-31 11:29:10 · 4768 阅读 · 0 评论 -
android高手之路--删除工程里面无用的代码和资源
如果你是一个经常开发android应用程序或者做android维护项目的人,我想说你对我谈论的这个话题,一定会感兴趣的。因为只有做到了这两点,你的项目生成的apk包才会更小,而不是随着你的开发和维护,无用的代码和资源无限的堆积,这对开发者和维护者来说不但是噩梦,更是一个无形的炸弹。好了,废话不多说,让我们一起来看看我是如何做到上面两点的吧。清除代码工具: UCDetector1.在原创 2012-08-31 17:31:38 · 22290 阅读 · 18 评论 -
Android 避免内存泄漏
Android应用程序的内存被限定在16MB,至少在G1手机上是这样。对于一个手机来说,这已经占用了非常多的内存了,但是对于开发者想要实现的目标而言,这些内存是非常少的。即时你本来就没打算用掉所有的内存,但是你应该尽可能的少用内存,来让其他程序可以保持运行,而不是被系统杀掉。系统在内存里保存的应用程序越多,用户在应用程序之间选择切换的速度就会越快。作为我工作的一部分,我跟踪了Android应用程序翻译 2012-11-24 21:41:22 · 1121 阅读 · 0 评论 -
记录一下arc修复的2个bug
1.在win7上路径里面含有特殊字符会crash的问题;2.Javaw.exe不能完全退出的问题; 问题1是在win7上,replaceAll函数的第一个参数非法导致,具体原因朋友们思考一下。问题2在初始化JFrame的时候简单的加上一句:setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);原创 2012-11-28 13:48:01 · 1702 阅读 · 0 评论 -
控制Android应用程序的耗电量
首先我们来看看Android手机的电量都主要消耗在了什么地方:显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。 简单的说也就是主要在以下情况下耗电比较多: 1、大数据量的传输。 2、不停的在网络间切换。 3、解析大量的文本数据。 那么我们怎么样来改善一下我们的程序呢? 1、在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那原创 2012-11-27 12:32:33 · 2318 阅读 · 0 评论 -
如何降低Android应用程序的耗电量
如何才能降低Android应用程序的耗电量呢?今天再一次回顾了一下09年Google IO大会Jeffrey Sharkey的演讲(Coding for Life — Battery Life, That Is),同时也讲一下应该如何有效地控制耗电量问题。 首先我们来看看Android手机的电量都主要消耗在了什么地方:显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。简单的说原创 2011-09-21 16:13:39 · 2642 阅读 · 0 评论 -
android多余资源自动清理工具arc发布到google code
1. 我已经将arc(android resource cleaner)的3.0 beta版本的源代码发布到google code,项目目前还很粗鄙,需要进一步的完善,里面也可能还有不少bug,需要解决,感兴趣的朋友可以联系我,里面有我的qq号码(286505491).2. 项目所在地址: https://android-resource-cleaner.googlecode.com/sv原创 2012-11-30 11:39:34 · 5718 阅读 · 1 评论 -
解析HttpProtocolParams的setUseExpectContinu函数(Expect 100-continue)
在分析这个问题之前我们需要了解一下什么是“Expect 100 Continue”和它到底是怎么去影响我们的http请求的,我们可以先看一下官方的解释是:Activates 'Expect: 100-Continue' handshake for the entity enclosing methods. The 'Expect: 100-Continue' handshake allows原创 2012-11-09 00:30:53 · 10596 阅读 · 0 评论 -
在android使用httpclient时出现“SocketException: Broken Pipe”的解决方法
原因分析:1.客户端与服务器的链接已经关闭(可能是客户端,也可能使服务器端,一般是客户端主动关闭),客户端继续向服务端写数据;2.在使用httpclient的threadsafeconnectionmanager或者poolconnectionmanger的时候容易出现,原因是我们设置了连接获取数据超时的时间;解决方法:1.为你的httpclient添加retry handler,原创 2012-11-06 16:19:39 · 7943 阅读 · 0 评论 -
常用mimeType 表
多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。内容类型(Content-Type),这个头部领域用于指定消息的类型。一般以下面的形式出现。[type]/[subtype]type有下面的形式。Text原创 2011-10-08 17:04:42 · 7719 阅读 · 0 评论 -
android应用程序抓包
1.root手机2.http://www.tcpdump.org/,此网站下载tcpdump文件。抓取手机运行网络信息,需要使用tcpdump命令,手机本身都没这个命令,所以要下载。存到手机系统磁盘的任意位置都可以,如 /data/local/tcpdump/ (此处tcpdump是文件夹).3. adb shell4.cd /data/local/tcpdump5. 给tcpdu原创 2012-11-24 21:46:41 · 1980 阅读 · 0 评论 -
Android上构建基于httpclient的网络连接池
先上代码:package xiaogang.enif.net;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;import java.security.KeyManagementException;import java.security.KeyStore;原创 2012-11-19 10:42:18 · 6666 阅读 · 8 评论 -
android开发群组
1.Android中国开发者团队 http://groups.google.com/group/Android-developers-zh2.google group http://groups.google.com/group/android-developers/subscribe?hl=en原创 2011-09-17 10:38:58 · 1694 阅读 · 0 评论