您好,欢迎访问三七文档
手机客户端改进历程大众点评网概况2003年创建,国内领先的城市生活消费指南网站覆盖全国2300多个城市,近120万家商户,2000万条点评信息活跃用户超过4200万,500M(GA)浏览量/月70台主干服务器,约165位技术人员点评手机App概况2009年10月发布Android1.0版,2010年01月发布iPhone1.0版,目前最新版4.62011年08月底手机独立用户数已超过1300万2011年08月底手机访问量已超过网站的60%,并且增长速度大于网站目录定位服务网络请求本地缓存界面改进其他改进定位服务地图显示定位定位GPS—卫星定位定位准确度高,速度慢,室内无法使用AGPS—手机基站&WiFi定位定位准确度稍差,速度快,室内可使用Android:国内行货手机多不包括AGPS定位功能iPhone:Apple基站&WiFi数据完备性不及Google,定位效果比Android差获取手机周围基站及WiFi站点信息,调用Google服务不能自己通过基站和WiFi站点信息实现定位,因为Apple不允许定位(cont.)定位得到的信息GPS坐标定位方式(GPS?基站?WiFi?)定位偏差时间戳CDMA2000的基站信息不全WiFi信号干扰提示“无法定位”,还是让用户觉得定位不准?用以确定最新的有效定位,但系统返回的时间戳可能错误地图坐标偏移maps.google.comditu.google.cn地图(cont.)支持在多种地图中显示商户位置GoogleMapBrutBaiduMapMapBarMiniMap自实现地图用于未安装地图的手机使用BaiduMap实现其他定位方式NFCQRCode超声波目录定位服务网络请求本地缓存界面改进其他改进网络请求连接数据协议协议HTTP:服务器和客户端都有成熟的支持Server:WebServerAndroid:ApacheHttpClientiOS:UrlRequestAPIRawTCP:可能在数据传输方面更高效率,需要大量实现代码连接AndroidSingleClientConnManagerThreadSafeClientConnManageriOS:自己实现连接管理数据数据格式XML:库支持完备,但数据有效率不高JSON:使用方便,库支持完备,但数据有效率不高Binary:需要自实现,但数据有效率高、安全性高50%NDK加速数据解析MD5,GZip...Crypto(encrypt,decrypt)URLEncoder,URLDecoderDateFormatter.parse()30倍网络连接探索保持长连接把多个请求合并探索替代HTTP的数据承载方式目录定位服务网络请求本地缓存界面改进其他改进本地缓存缓存方式缓存内容缓存内容接口数据缓存DISABLED——登陆、注册、签到等NORMAL——附近商户等PERSISTENT——城市列表等图片缓存内存缓存(不要使用SoftReference缓存)磁盘缓存缓存方式Key–Value式缓存Key:资源URLValue:资源数据SQLiteDB组织和管理方便,但速度慢服务器接口数据采用SQLiteDB方式缓存文件难以管理,速度可能快于SQLiteDB图片缓存采用文件方式缓存50%其他缓存方式Key-ValueDBLevelDB:C++编写,开源()TreapDB:Java编写,开源()测试方法Key:40-80字节的urlValue:4K-32K字节的随机数据生成100条key-value,写入各数据库,再乱序读100条数据。Write(ms/条)Read(ms/条)Sqlite189.724.89LevelDB94.382.51TreapDB8.405.39目录定位服务网络请求本地缓存界面改进其他改进内存Apk尺寸StrictMode界面改进StrictMode主线程完成了95%以上的任务如果UI线程有连续多次超过100ms的非UI任务执行,用户就会觉得UI刷新不及时StrictMode(cont.)自动检测在主线程执行的文件读写及网络IO操作StrictModepolicyviolation;~duration=268ms:android.os.StrictMode$StrictModeDiskWriteViolation:policy=19violation=1atandroid.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:732)atandroid.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1524)atandroid.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)atcom.google.android.apps.analytics.PersistentEventStore.putEvent(UnknownSource)atcom.google.android.apps.analytics.GoogleAnalyticsTracker.createEvent(UnknownSource)atcom.google.android.apps.analytics.GoogleAnalyticsTracker.trackPageView(UnknownSource)atcom.dianping.app.GoogleAnalyticsHandler.handleMessage(GoogleAnalyticsHandler.java:49)atandroid.os.Handler.dispatchMessage(Handler.java:99)atandroid.os.Looper.loop(Looper.java:130)atandroid.app.ActivityThread.main(ActivityThread.java:3683)atjava.lang.reflect.Method.invokeNative(NativeMethod)atjava.lang.reflect.Method.invoke(Method.java:507)atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)atdalvik.system.NativeStart.main(NativeMethod)StrictMode(cont.)非UI长操作移至后台的办法AsyncTaskHandler/MessageThread内存消除内存泄露尽量降低内存占用HPROF+EclipseMemoryAnalyzer内存(cont.)内存(cont.)包括所有需要的图片类型,避免系统在小内存手机上选择大图片drawabledrawable-ldpidrawable-mdpidrawable-hdpiApk尺寸没有纹理的背景图使用.9.png或者xml资源圆角、渐变色、填充多个类似图片可拆成背景+前景图部分资源可安装之后从网络加载如尺寸需求迫切,可分版本发布目录定位服务网络请求本地缓存界面改进其他改进App交互GoogleAnalytics统计,根据反馈调整界面。PageView/EventApp功能关注用户反馈用户反馈来源•AppStore&AndroidMarket等的用户评论•点评Support论坛•App的报错或建议功能•…处理用户反馈•去掉开机执行•去掉后台服务•…流程改进随着人员和代码规模的增加,引入项目流程元素,保证项目可控及产品稳定CI服务器强制CodeReview…迭代开发,一个月发布一次,尽快满足新需求持续改进,打造用户喜爱的产品Thanks~
本文标题:手机客户端改进历程
链接地址:https://www.777doc.com/doc-3384590 .html