Android
文章平均质量分 89
hursing
我不会告诉你他是一只葵鼠哒 O(∩_∩)O
展开
-
App异常汇总与对策
应该做的是在写代码前就确定可能有什么异常,有约定、协议、规范不会出错的,都不用做防御,在开发阶段最好就是通过崩溃来达成最高级别的警示。还可以加一些assert,在开发阶段澄清所有的异常。assert也可以防止别人错误地使用你的代码。我们不是要处理所有的可能性,否则岂不是所有代码都要加try catch?原创 2024-04-28 17:37:33 · 1158 阅读 · 3 评论 -
总结移动开发入行十周年
我从事移动开发始于2011年春节后。这一年iOS和Android正式登上舞台,使得塞班和WinPhone进入了维护阶段,而Java预装系统则直接萎缩。身在移动开发最前线,直观的感受就是这5个平台的开发团队人数变化,而到了2013年,就只剩下iOS和Android了。2012年Q4我开始了写博客,也正好在2013年的博文里提到,iOS和Android程序员终会像Windows程序员那样像个“标配”般“平凡”。就让我姑且认为大厂们取消大小周加班算是个标志吧,这一天来了。虽然我很早就渗透去了非客户端开发甚原创 2021-07-11 21:16:12 · 2863 阅读 · 4 评论 -
客户端开发设计总结
1 基础设施程序最基本的处理就是数据IO以及为了并行计算所做的操作,它们通常会作为程序的底层框架,供上层使用。2 交互从PC到现在的移动设备还有VR,人机交互中的输入设备在不断自然化,可是展示界面的元素仍然还是这几种:静态文本、按钮、列表、输入框、选择菜单、进度提示、滚动条、标签页。每种UI框架都提供这些基本组件,可以说掌握它们就等于对这个框架入门了。高级的交互会跨越窗口、跨越程序,并能更智能化地响原创 2016-09-19 16:01:04 · 20738 阅读 · 3 评论 -
ViewPager实现Recycle机制和响应notifyDataSetChanged
1.目标主界面要求水平移动翻页效果,每次只能翻一页,可以翻无数页。2.实现思路针对“每次只能翻一页”这个要求,简单使用SDK的话只有用ViewPager。ViewPager的PageAdapter是没有实现RecyclerView的ViewHolder.itemView回收机制的。即使是子类FragmentStatePagerAdapter,也只是保存状态后销毁Fragment,Fragment本身原创 2017-01-10 11:50:54 · 2261 阅读 · 0 评论 -
跨平台客户端开发经验总结
1 前言因为《猫科动物和企鹅在窗口外看机器人吃苹果》这出戏太美,很多公司都希望能全平台同时发布新版本app,还要能复用代码以降低开发成本。这迫使一部分已熟悉某个平台的先锋们转岗到另一个平台边学习边开发。最终有少部分人在每个战场都打拼过,从而能全盘考虑以设计出良好的可复用架构。 革命总会出新知,今天已有一些开源框架能应对同时在5大平台Mac OS X、Linux、Windows、Android、iO原创 2015-09-22 16:25:21 · 16791 阅读 · 12 评论 -
HTTP(S)网络框架的设计
0.烦恼操作系统提供的网络接口都相对接近底层,使用时有诸多不便。但是我们不能期望系统API做得很高级,因为没有绝对合适的网络库,必须定制化从而达到适合某业务下的最佳性能。1.需求移动app使用网络库的场景不外乎三个:和自家(CS架构的)服务器通信下载文件Web浏览从方便和可扩展性出发,不少app会选择通信协议为HTTP(S),数据协议则为自定义。为了保护隐私,如果不使用HTTPS,数据都该自原创 2016-08-15 15:07:02 · 4329 阅读 · 1 评论 -
boost全平台编译方法
0.通用规则boost自带一套编译工具bjam,bjam本身是跨平台的,并且也要自行编译出来。在boost目录下有bootstrap.sh和bootstrap.bat两个脚本分别用来编译*nix和windows下的bjam。bootstrap脚本可以传入参数,以在编译bjam过程中生成特定的编译boost的配置。编译bjam过程中生成的project-config.jam就是默认的配置,但还可以在运原创 2015-06-11 12:00:25 · 52782 阅读 · 15 评论 -
移动开发代码规范与格式化工具
原则有几个原则可以帮助大家不看文档也能写出符合规范的代码:如果是修改已有的代码,跟周围的风格一致如果是使用系统SDK来开发,除非特别说明,风格要和系统SDK一致新建文件写代码都按规范来写;旧文件中不符合规范的代码,找个合适的时间批处理格式化。学会IDE如何设置默认的代码格式如果无公司标准,为了方便都使用谷歌的代码规范集,它已覆盖了很多流行的编程语言。规范iOSApple本身做了很好的规范,原创 2017-12-02 09:58:07 · 1935 阅读 · 0 评论 -
apk、ipa包size优化手段
删除冗余代码和资源能简单用代码画的图形,不使用图片能使用系统API自己实现的,不使用第三方库。第三方库一般会考虑通用的情形,实际上不会用上它的全部功能。重构 抽离类似的代码做成通用的模块,减少复制粘贴出来的代码。删除过度设计的代码:看似抽象分层做得很好,但实际不会有作用的代码。(例如,只有一个子类的基类)算法优化,使用更少的代码来实现同一功能。启动图:不使用多张图片来匹配不同分辨率...原创 2018-06-26 11:59:10 · 1485 阅读 · 0 评论 -
JavaScript与WebView交互框架设计
总体设计现在最新的xcode都只支持iOS8.0以上的版本了,所以iOS应该直接使用性能高、功能多的WKWebView接口。UIWebView的注入对象方式需要依赖KVC,且有坑,不建议使用。本文都以WKWebView的接口来设计。数据从native传递到js只有一种方法: - ios是[webView evaluateJavaScript:@"some-js-code" compl原创 2018-07-11 16:44:12 · 2768 阅读 · 0 评论 -
移动App模块化设计
业务模块内部一般是MVC、MVP、MVVM式设计,可是这些设计模式没解答跨模块的可依赖性。大部分人会认可基础层可被所有代码依赖,但少有人明确UI层可依赖所有业务层代码(例如A页面可依赖B页面的model)。一般按照界面划分模块后,同属该模块的业务层和UI层都放在同一目录下(还可以有子目录)。如果设计得好,这部分东西是不关联具体业务的,多数可以跨项目使用,由业务层做定制化后为所属项目服务。(层次是功能意义逻辑的划分,不代表每层都有一个类来封装上一层,有时候同一个类内的函数集就是一层)这层的目录命名可以叫。原创 2018-12-18 17:02:13 · 5688 阅读 · 2 评论 -
boost::asio的http client应用笔记
1 踩过的坑1.1 io_serviceboost::asio::io_service::run()会一直运行到没有任务为止,如果中途调用stop(),则所有等待中的任务会立刻执行。解决方案是用run_one(),即while (keep_running) io_service_.run_one();keep_running是个bool值,要stop io_service的时候直接置fals原创 2015-07-09 10:16:24 · 13227 阅读 · 5 评论 -
Android Canvas drawText实现中文垂直居中
目标:把中文字符绘制到目标矩形的居中位置。问题:Android的Canvas绘图,drawText里的origin是以baseline为基准的,直接以目标矩形的bottom传进drawText,字符位置会偏下。这样写代码:@Overridepublic void onDraw (Canvas canvas) { Rect targetRect = new Rect(50,原创 2014-01-24 10:32:55 · 75565 阅读 · 11 评论 -
Android程序内存占用检测
1.检查系统总内存liuhx@uc ~ $ adb shell cat /proc/meminfoMemTotal: 840868 kBMemFree: 457344 kBBuffers: 1744 kBCached: 203064 kBSwapCached: 0 kBActive:原创 2014-05-24 11:39:05 · 7173 阅读 · 0 评论 -
bash shell脚本实现android自动化测试部署与运行
我的配置的linux 64, android4.2.2的sdk。 实现的细节都在代码注释里了,变量名也是本意。主流程为:检测是否指定端口的模拟器已经运行,若有则关闭创建模拟器启动模拟器用ant build包,通过检查bin目录下有没有apk来确定是否成功检查指定端口的模拟器是否已正常运行用adb安装apk启动apk的activity,让程序自己跑用shell ps循环检测程序是否已原创 2013-10-28 15:51:42 · 5396 阅读 · 0 评论 -
AOSP和Chromium的Android WebViewTest
AOSP的在$android4.2/frameworks/base/tests/WebViewTests/目录下,可用eclipse导入工程。就几个文件。最下面的是Activity,没啥特别,就是在LinearLayout里面放了WebView。JavaBridgeTestBase是所有TestCase的基类,继承了ActivityInstrumentationTestCase2,原创 2014-01-26 14:40:19 · 5253 阅读 · 4 评论 -
接口测试的用例设计思路
单元测试是被测的函数都只作用于其所属的类,接口测试是测试多个类/模块间的相互作用,即目标是被测函数如何被调用以及调用后会对外产生什么结果。既然是专注于模块间作用,那么可测点就是public的接口,其可分为:(点击查看大图)主动调用型是指被测函数需要主动调用,以测试其结果或影响。故测试目标有两类:1.对“获取型”的接口是在不同的时机执行获取动作,测试返回/输出值是否符合预期2.对“操...原创 2013-11-26 16:07:36 · 12172 阅读 · 4 评论 -
搭建Android生产环境傻瓜教程(一)Ubuntu系统环境和常用软件
首先要到ubuntu官网http://www.ubuntu.com/download/desktop下载安装包。最好是安装大多数开发者在用的版本,不然你遇到问题也没人回答,所以装的是12,不是13.另外因为在中文版上开发会有很多问题,所以乖乖地装英文版吧。因为我的台式机是i7 cpu,所以选择下载64位版.我觉得大公司应该捐助一下:下载得到u原创 2013-06-26 17:19:47 · 4068 阅读 · 0 评论 -
Android系统应用信息中存储和缓存的计算方法
进行如下操作:设置->应用->选择一个应用->应用信息会到达如下界面:可以看到这个应用占用的磁盘空间。先说结果,这几项有计算哪些文件(夹)。1.应用,由三项组成/data/data/com.myapp/lib,即so库文件夹大小/data/app/com.myapp-1.apk,原始apk文件的复制/data/dalvik-cache/data@app@com.原创 2014-05-22 16:42:52 · 10964 阅读 · 0 评论 -
在Android上玩google-breakpad(崩溃日志收集)
首选得到代码svn co http://google-breakpad.googlecode.com/svn/trunk breakpad原创 2014-07-03 17:18:21 · 22418 阅读 · 3 评论 -
搭建Android生产环境傻瓜教程(二)开发环境
SVN客户端:http://wiki.rabbitvcs.org/wiki/install/ubuntu。貌似这个最像windows的TortoiseSVN了,居然叫RabbitVCS,龟兔赛跑……不过这兔子的效率一般,建议用终端checkout。运行32位程序:某些32位的程序运行不了,ia32-libs可以解决sudo apt-get install ia32-libs原创 2013-06-26 20:09:56 · 3949 阅读 · 0 评论 -
Windows SublimeText内使用NDK编译Android so(不用cygwin)
测试环境:sublime text version 2.0.2, build 2221 和 sublime text stable channel, build 3065 (version3)Win7 64位android-ndk-r10c windows x86_64步骤:1.设置好ndk环境变量假如把ndk压缩包解压到D:\android-ndk-r10c,则控制面板 -> 系统 -> 高级系原创 2014-11-19 16:31:01 · 4977 阅读 · 1 评论 -
Linux Mint 15下编译Chromium for Android
首先得看官方文档,大部分操作步骤就是那样,我就不翻译了,只做补充。https://code.google.com/p/chromium/wiki/AndroidBuildInstructions1. 在执行这步sudo ./install-build-deps-android.sh前,修改这个脚本,把if /usr/bin/lsb_release -r -s | grep -q "12原创 2013-07-08 14:57:09 · 3693 阅读 · 0 评论 -
Android4.4系统浏览器Chromium实现的加载模块与流程
本文只描述Http网络请求相关的信息,Https、Spdy、file、ftp、websocket等的类型只提及在哪里出现关系分支。 下面是加载流程的xmind导出图,最好另存为到本地用看图软件看。看图提示:从上往下是根据堆栈倒置过来画的流程“..."表示省略IPC机制的代码图中有一些地方省略了Callback机制的代码同一父节点表示在此父函数内按顺序执行大部分类名和函数名已代表了其功能和意义,还可原创 2014-08-21 11:36:45 · 9302 阅读 · 1 评论 -
libevent2笔记(linux、windows、android的编译)
0. 前言我使用的版本是libevent-2.0.21-stable。高级的应用还是得看官网文档http://www.wangafu.net/~nickm/libevent-2.0/doxygen/html/1. 编译1.1 Linux版编译在目录下./configure && make即可在./.lib/下得到5个.a静态库。 sdfsdfdsf原创 2015-02-26 15:56:22 · 9298 阅读 · 1 评论