Android App
a345017062
这个作者很懒,什么都没留下…
展开
-
好客户端是怎样炼成的
本文主要从开发的角度讲一下一个客户端的开发主要涉及的方方面面,让想了解App开发的同学做个快速入门。一、开发前准备这个主要是产品的设计阶段。1、确定产品的功能List,主要操作逻辑,产品满足的需求目标,以及过程。输出以PRD、原型图、流程图等为主。2、画视觉稿,如,概念稿、效果图等。把产品经理的输出以二维、Flash等方式表达出来原创 2015-05-06 17:15:14 · 3992 阅读 · 2 评论 -
Android系统设计中的设计模式分析之一
1、 开闭(OCP)简介:要扩展,不要修改。比如我对外提供了一个接口。现在想更新的话,不要直接修改这个接口,而是提供另外一个接口,然后通知大家在什么时间之前切换到这个新接口。举例:这个设计模式无处不在,Android每次升级都会提供一些新的API,有一些较老的API就会置为deprecated。如从level 1就支持的Service.onStart,在level 5中,已经被Servi原创 2012-08-24 16:41:10 · 4896 阅读 · 1 评论 -
Android系统设计中的设计模式分析之二
Factory:标准设计模式中存在两种工厂模式,可以参见下面这两个地址,里面有详细的介绍。Factoryhttp://blog.csdn.net/cjjky/article/details/7314118Abstract Factoryhttp://blog.csdn.net/cjjky/article/details/7346893其要点都在于Client只关心抽象工厂和原创 2012-10-10 19:18:11 · 2539 阅读 · 0 评论 -
Android系统设计中的设计模式分析之三
Visitor先贴一个有代码例子,且好理解的文章:http://www.cnblogs.com/shanghaif/archive/2008/12/08/1350417.html再转发一个我认为最形象的解释。如果有一棵继承树,你要使用某个独立的对象遍历这棵树,并且呼叫树上某一个共同的方法,那么你使用iterator。比如这是一棵苹果树,你使用一个摘苹果的杆子把苹果一个一个摘下来,这原创 2012-10-17 16:37:00 · 1743 阅读 · 0 评论 -
Android中的本地存储路径
Context.getCacheDir()/data/data/cacheThese files will be ones that get deleted first when the device runs low on storage. There is no guarantee when these files will be deleted.但是,最好不要依赖系统来管理,应该原创 2012-10-19 10:31:08 · 18587 阅读 · 0 评论 -
Activity、Fragment对象内存泄漏的解决思路
先转载一篇文章:activity contex and memery leak(http://blog.csdn.net/prog_dong/article/details/5618995)通过这篇文章,可以理出这样一个思路来,即这Activity、Fragment对象本身的内存泄漏,其实都是来源于循环引用。比如,Activity/Fragment内部引用了对象(如:View),如果把这些对象原创 2012-12-16 13:12:45 · 16710 阅读 · 0 评论 -
乐Pad问题汇总
Bitmap.getConfig这个会导致进程崩溃GLSurfaceView.surfaceDestroyed中如果使用queueEvent的话,最好在queueEvent之后休眠一下,因为queueEvent里面插入的Runnable可能不会被执行。原创 2012-05-18 16:27:33 · 1366 阅读 · 0 评论 -
Android layer type与WebView白屏以及WebView不随动画而动的问题
先说说这三个layer。LAYER_TYPE_SOFTWARE无论硬件加速是否打开,都会有一张Bitmap(software layer),并在上面对WebView进行软渲染。好处:在进行动画,使用software可以只画一次View树,很省。什么时候不要用:View树经常更新时不要用。尤其是在硬件加速打开时,每次更新消耗的时间更多。因为渲染完这张Bitmap后还需原创 2012-04-19 18:49:53 · 33764 阅读 · 10 评论 -
DNS优化之IP直连
移动互联网中,DNS解析的失败率是联网失败中占比很大的一种。为了优化这个问题,我们使用了IP直连。即,从服务器拉取一个配置文件,里面包含域名到IP映射。客户端每次联网时根据域名在配置文件中查找到对应IP,直接使用IP进行请求。这里有几个地方需要注意:1、配置文件拉取。使用Get请求,尽量使用请求Url简单,减少出错概率。并且这个时候不能使用IP直连,避免IP改变时拉取失败。2、原创 2014-07-22 18:55:21 · 10349 阅读 · 9 评论 -
Android的WebView退出后flash视频播放器无法退出的问题
public void onPause() {//继承自Activity super.onPause(); web.onPause(); }public void onResume() {//继承自Activity super.onResume(); web.onResume(); }把这两个加上就可以了。另外,看到网上有提到有下面这种方式:原创 2011-09-19 02:00:59 · 11268 阅读 · 6 评论 -
Android中使用TextView图文混排实现动态表情
使用ImageSpan图文混排,这个网上教程很多。把一个Drawable依附到CharSequence上面就可以了。要实现网上的动态表情的话,就要麻烦一点儿。首先用gif解析工具把一张gif解析成N张Bitmap和N个播放每张Bitmap时的delay值。接下来自己实现一个Drawable,里面根据时间点去更换Bitmap,就可以实现动态表情功能了。发现有的gif解析算法有问题,解析出来的Bi原创 2011-09-30 17:58:42 · 10544 阅读 · 2 评论 -
Android 3.X中WebView使用ZOOM崩溃的问题
09-29 21:44:08.557: ERROR/ActivityThread(31036): Activity XXX has leaked IntentReceiver android.widget.ZoomButtonsController$1@419abcf0 that was originally registered here. Are you missing a call to原创 2011-09-30 21:35:12 · 13795 阅读 · 2 评论 -
Android上面做Flash播放器
有这样一个需求,做一个flash视频播放器。Android2.2之后才支持安装Flash插件并在WebView播放Flash视频,初步想法是给Activity设置一个全屏的WebView,然后传入一个Flash地址。后来发现了一些问题,慢慢才理清。一、 直接调用webView.loadUrl并传入Flash地址,在我的定制机器上面,有时会出现白屏(无声音无图像)。二、 把Flash地址原创 2011-10-24 13:56:59 · 150896 阅读 · 32 评论 -
Android Widget开发的相关技术点记录
1、Widget的UI需要展示的数据以静态变量的形式存放在了Provider中。与同事讨论过其它两种方案的可行性:A、开启Service用来取数据,数据以静态变量形式存放在Service当中。B、存储在本地。这三种方案的好坏,其实全在于一个东西就是静态变量的生命周期。按Linux内存管理方式来说,只要内存不满,是不会释放内存中的进程的。也主是说,客户端启动一次之后,只要不是原创 2011-10-24 21:24:35 · 1820 阅读 · 0 评论 -
Android上面开发自己的Toast系统的思路
发现系统的Toast的cancel机制有问题,一旦把前一个cancel掉再显示新的Toast时,新的Toast会卡住一段时间显示不出来。建立一个自己的Toast系统需要注意的几个地方:1、建立Service专门负责显示、隐藏等2、在Service中使用WindowManager的addView和removeView实现显示、隐藏3、注意需要设置的flag、format和ty原创 2011-11-15 19:19:41 · 3237 阅读 · 2 评论 -
三星P1000中出现的怪现象
布局中存在一个ImageSwitcher和一个ImageButton,按下ImageButton后释放Bitmap数组中的数据(其中有一张正被ImageSwitcher使用),再调用finish()结束Activity,如下:private void finishUserGuid() { for (int i = 0; i < bitmapBuffer.length; i++) {原创 2011-11-18 20:13:19 · 1689 阅读 · 0 评论 -
Android如何最优化的读取一张Bitmap
Drawable缓存问题,显示清晰度,Resource.getDrawable会根据ID返回Drawable,然后把这个Drawable缓存起来,看以下这个代码段:InputStream is = mAssets.openNonAsset( value.assetCookie, file, AssetManager.ACC原创 2011-11-22 10:23:41 · 8751 阅读 · 1 评论 -
Android EditText设置光标位置问题
EditText中有一些预置文本的时候,想把光标调到最前面,一开始是使用的setSelection(0),结果发现在三星P1000上面有问题。经过研究发现需要先调用EditText.requestFocus,再调用setSelection(0)。否则的话,在2.x的机器上有问题,但3.x上面是好着的。原创 2011-12-07 12:49:24 · 13815 阅读 · 1 评论 -
Android上使用NDK做3D特效时碰到的一些问题及解决办法
自己老老实实按3D的做法来做时,3.x和4.x平台上都好着,出来的效果和想像的一样。2.3上面,会有图层覆盖问题,把GLSurfaceView的背景设置透明后,也好了。2.2上面,直接白屏。试了一下,主要是贴图的图片宽高需要是2的N次方。有些引擎内部会去处理这个问题。比如你传入了一张48*59的图,引擎会帮你把它做成64*64的图,然后只渲染48*59的那一部分。补充于20原创 2012-04-05 19:03:00 · 1859 阅读 · 0 评论 -
Notification icon问题
Notification图标设置问题只设置Notification.icon的话,状态栏和拉开状态栏后的显示区域都使用这个值。只设置contentView,不设置Notification.icon或者Notification.ticker的话,状态栏不显示一开始的滚动信息既设置Notification.icon又设置contentView的话,状态栏显示Notification.ico原创 2012-12-25 20:39:48 · 17846 阅读 · 1 评论 -
App内存泄漏问题
一、Java内存泄漏1、主要原因Activity(静态引用)、Dialog在onDestroy时没有被dismiss等。2、分析工具:MAT产生的hrof文件查看引用链,断掉就OK。AOP在onCreate、onDestroy、finalize埋点。在onDestory被调用后,运行GC,然后,如果finalize很长时间没有被调用就有内在泄漏了。3、解决方案:Contex原创 2013-01-18 20:46:15 · 6817 阅读 · 0 评论 -
聊一下移动开发时MVC中的控制器
控制器,是MVC中的一环,也是手机软件开发中最需要注意的地方,对它的认识不清晰会导致业务层代码的结构混乱,耦合性高。经常见一些进行了几年的老项目代码,如果不是经常的迭代重构,维护起来会非常痛苦。今天重点说一下怎么化解这个问题。其实,每个平台都对Controller有很清晰的描述和定义,只不过我们在使用中容易自己乱了阵脚,而最终导致自己难受罢了。像Android中的Activity、Fragme原创 2014-12-25 11:02:36 · 2006 阅读 · 0 评论 -
移动App开发中的View解耦问题
这几天在做给IOS代码降耦的事情,顺便唠叨几句开发中的View解耦问题。首先,我们先定位一下View的角色:View应该只操心前/后景色,字体属性,布局特性,x/y/width/height等纯视觉属性。不应该操心数据加载、修改,事件响应等Model和Controller关心的事。当然,也包括自定义的View。接下来讨论针对这个角色在实际开发中如何降低View部分耦合对整体架构的冲原创 2015-01-06 12:20:37 · 5229 阅读 · 0 评论 -
论PAGELINK的必要性
通常来说,App内的PageLink机制有几个显著的优点值得我们去做:如,增加运营灵活性,页面开放性,利于效果追踪,反推模块间解耦,降低子工程间的依赖等。客户端总有那么几个核心业务承接页面,是给用户展示信息的主场,也是运营活动、消息推送时的用户承接页。如微博的个人主页,手淘的原创 2015-04-23 16:36:14 · 1776 阅读 · 0 评论 -
移动APP中的多级CACHE策略
App运行过程中会产生很多随机、零碎、无固定结构的数据,这些数据重要性、数据量多变,是数据管理的一个难点。这里分享一下笔者这几年常用到的一些多级Cache策略。面前上面提到的这些问题,梳理一下我们要达到的目标:随机存取,数据非结构化,数据按重要性分级。1、为实现随原创 2015-04-23 21:09:04 · 3358 阅读 · 0 评论 -
ICONFONT在APP中的使用
阿里IconFont平台http://www.iconfont.cn/这里是阿里巴巴UED部门开发的IconFont平台,目前阿里系的重量级产品都在使用,里面有很多资源可供使用。这里说说如何在客户端内使用。IconFont虽然看起来是图标,实际原理跟字体的实现方式是一样的,所以我们把每个Icon当作一个特殊的文字来理解和处理。IconFont使用1、首先登录原创 2015-06-11 11:57:07 · 8154 阅读 · 0 评论 -
老码农谈NDK开发
关于NDK,我也天真过5、6年前刚拿到HTC的G1开始做Android开发时,得知Java可以和C混编激动不已,真的是拿到钥匙见什么都是锁,老想着用NDK做些事情。到后来公司做了一个带有强烈技术风格的业务决策,我被迫把NDK来回折腾了很长时间,也没能折腾出什么成果,但这个决策却把公司折腾完蛋,我也就对NDK渐渐心恢意冷了,真正体会到,做业务,服务用户为主,技术上,好用是王道。今天收到一封邮件(来自:原创 2016-01-16 17:48:56 · 4720 阅读 · 4 评论 -
创业公司十分钟简单搭建GIT私有库
一、背景小公司,协同开发的人不多,建gitlab比较麻烦,只需要在Server端建立一个简单的git共享库就OK。二、建立仓库Server端:1、在Server端建立项目目录。mkdir sample2、在sample中执行git —bare init,生成sample.git目录,这个目录是个共享库,所有代码在该目录下。本地端:1、clon原创 2015-07-24 11:43:26 · 5957 阅读 · 1 评论 -
Bitmap recycle方法与制作Bitmap的内存缓存
recycle方法不是必须调用,就算调了GC也不会立即回收Java层的Bitmap对象。这个跟把一个对象手动置空一个道理。可以看一下API说明:This operation cannot be reversed, so it should only be called if you are sure there are no further uses for the bitmap. This原创 2012-09-10 13:32:23 · 9351 阅读 · 3 评论 -
在Android App开发中实现任意Java方法的拦截
在Android的App开发过程中,经常会有一些导致App进程崩溃的Framework层Bug,比如这里讲的Cookie同步引起的崩溃等问题。这种情况下,我们如果能拦截到Framework层的Api调用,对它做个包装把异常捕捉住,就可以避免这个问题了。当时,纯Java层是做不到的,而Java中的Proxy机制也只能针对自己定义的类,系统Framework层的类就不管用了。这里面说一种通过借鉴J原创 2014-11-27 09:10:46 · 7930 阅读 · 2 评论 -
Android进程注入
所有代码在这里下载:http://download.csdn.net/detail/a345017062/8133239里面有两个exe,inj是一个C层进程注入的例子。inj_dalvik是我写的Java注入。C层的进程注入借直接拉的洗大师的开源项目(https://code.google.com/p/libandroidinjector/)Android的基础服务大部分都是原创 2014-11-07 18:28:45 · 11900 阅读 · 6 评论 -
Android 开发Tips
1、模块间有消息需要传递时,使用LocalBroadcastManager替代Listener进行模块解耦。除了解耦,这样发送消息和执行消息差一个线程循环,可以减小方法的调用链,我这就碰到一次方法调用链太长导致StackOverflow的问题。2、静态变量不要直接或者间接引用Activity、Service等。这会使用Activity以及它所引用的所有对象无法释放,然后,用户操作时间一原创 2013-12-24 20:41:57 · 3382 阅读 · 0 评论 -
Android WebView缓存策略详解
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即appcache)。一、网页缓存1、缓存构成/data/data/package_name/cache//data/data/package_name/database/webview.db/data/data/package_name/database/webviewCache.db原创 2013-02-06 12:03:09 · 61655 阅读 · 9 评论 -
从安全和体验上解析移动App的登录
App登录需要解决的问题有两个:安全、体验。它们分别对应着登录过程的用户认证,以及用户登录过程操作复杂度两个问题。一、登录过程的用户认证,常见的手段有密码加密传输、动态密码、验证码等。1、密码加密。目前互联网行业的移动APP有不少在使用最简单的做法:根据密码生成一个散列值,把散列值发送给服务器。服务器计算库中用户密码的散列值,然后和客户端传来的散列值比较,一致的话,登录原创 2013-03-03 14:36:44 · 37577 阅读 · 6 评论 -
WebView适配问题集锦
Android 4.0以上的系统设置中的开发人员设置中有一项是“强制使用GPU渲染”。当这个开启时,可能会引起WebView的稳定,如页面加载后一闪而过又变成空白等。好在这一项默认是关闭的。不过硬件加速确实会造成WebView容易出现问题,原来碰到过不少。但硬件加速确实有不少好处,可以大大加快客户端的速度,尤其是在播放动画的时候。最实惠的做法是整体打开硬件加速,然后根据实际场景使用setLay原创 2013-03-07 20:13:01 · 27778 阅读 · 3 评论 -
Android WebView缓存分析
WebView的缓存可以分为页面缓存和数据缓存。页面缓存是指加载一个网页时的html、JS、CSS等页面或者资源数据。这些缓存资源是由于浏览器的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。他们的索引存放在/data/data/package_name/databases下。他们的文件存放在/data/data/package_name/cach原创 2013-03-21 21:06:43 · 38775 阅读 · 3 评论 -
Hybrid优化策略分析
Hybrid越来越成为开发的一种常见的开发方式,但说到Hybrid,除了开发上的高效和更新上的快捷之外,速度是被提到最多的,我们就从这里开始着手。这里跟大家分享一些这方面的经验,希望能对大家有所帮助。我们把一个Html页面的加载过程分为三段:加载、渲染、Ajax请求。然后从这三个阶段分别谈一下优化的策略。1、加载。首先,要充分利用浏览器的缓存策略来实现快速加载。这样就能保证只要不升原创 2013-03-28 21:12:46 · 6333 阅读 · 0 评论 -
手机客户端开发中的“恶意代理”攻击分析
设计HTTP安全的时候,恶意代理是需要考虑到的很重要的一环,尤其在这个“Wifi横行”的年代。一个酒店、商厦中不怀好意的免费Wifi节点,可能就会让用户在使用客户端的过程中,泄漏密码、资金等重要信息。本文从常见恶意代理的几种攻击方式出发,谈一谈如何在安全设计上避免被恶心代理攻击。一、报文纂改这个是攻击力比较小的方式,只要稍有一些安全意识,就容易防范。典型的攻击方式是通过恶意代理截取到一原创 2013-03-30 11:46:07 · 2720 阅读 · 0 评论 -
图片缓存实现策略分析
从网络上加载一张图,然后把它显示到UI上是个很简单的事情。当图片变多时,处理起来就有些麻烦了,很典型的应用场景,如ListView,GridView或者ViePager等。我们既需要保证用户看到更多的图片,以免屏幕出现大面积的空白,又要保证内存能Hold住。GC会自动释放一个没有强引用的图片或者View,这本来是个好事情,但为了让用户来回滚动时还能快速加载老图片,通常会使用图片缓存。这篇文章就翻译 2013-04-02 22:27:15 · 6212 阅读 · 0 评论 -
进一步优化Bitmap Cache策略
上一篇文章中(http://blog.csdn.net/a345017062/article/details/8753649)提到了两种bitmap cache,这篇文章讲一下具体如何确定具体的Bitmap Cache策略。一、为了更快的理解我们的策略,需要先说一下不同版本的Android系统中,对Bitmap的处理有何不同。1、Android 2.2 (API level 8),翻译 2013-04-03 14:06:36 · 7404 阅读 · 2 评论