开发中遇到的难点

这些年在项目开发中遇到过很多困难,  有些在当时觉得很困难, 但是后来回头再看时感觉也没那么难,  所以要在其中找一个最困难的, 好像也不太容易比较.

这里就简单说两个印象最深刻的吧.

第一个是当开始开发时的一个页面嵌套滑动的需求开发,   用在查词结果页的展示,  (此处可以展示实景)

难点是要在一个可以侧滑的场景下,  也可以上下滑动,  并且在上下滑动的同时要控制header的展示位置, 当时也是参考了很多实现, 包括, 外部viewpager+内部listview,  listview+悬浮header

scrollview+listview    发现都不能很好的实现,   当时自己也是对页面触摸事件分发一知半解,  对嵌套页面的滑动冲突没有实际经验, 所以面对这个问题觉得很头大.

好在最终在借鉴各种方案的前提下,  通过外部scrollview + viewpager+listview的方式实现了,  主要逻辑都在外部的scrollview的dispatchTouchEvent()中,

经过这一两年, 也遇到过一些其他的例子, 现在仍然感觉当时的处理还是比较有道理的.

通过这个需求, 自己对页面事件分发流程的理解也算是更深一步.

第二个要说一个应用换肤的需求, 当时产品提出一个笼统的换肤的要求,  但没有说明具体的方式方法,  我们也是分析研究了几种当时能够想到的方式, 包括主题切换方式实现,  还有通过插件方式提供资源包, 又分为静态预置, 动态获取两种更新方式.    形式上也分为简单资源压缩包, 或者以apk形式形式提供.   而在资源包具体实现上又分为全量包, 和差量包;

这个需求的难点在于前期的这些调研,  需要对每种方案都进行研究, 分析原理, 风险, 并测试流程.

最终考虑到我们的换肤需求, 并没有太多的动态性,  作为我们的应用未来可能也不会qq一样会有第三方提供主题插件,  而且未来的UI变化太大, 也无法提前确定一套颜色+图片的设计框架.

所以最终我们选择了最保守的方案,  只是抽取了应用设计的颜色, 在不同的5个主题下分别定义了这几十种颜色, 而在后期的页面开发中都必须使用这些颜色号, 而不能直接设置具体颜色值.

这样主题切换时, 就会自动呈现不同的颜色主题.   此处可以实景演示.

代码重构:  从最开始的原始结构: activity+ fragment 逐渐过渡到mvp模式开发.    在业务分模块的前提下, 区分model, presenter, view三个部分

其他也有很多难点,包括:

实现兼容的状态栏沉浸式方案, 并且解决因此引起的AdjustResize模式失效.  至今stackoverflow上还有这个问题的讨论, 当时也是查了很多资源, 才解决.

加快应用启动速度,  需求要求我们的查词页面在所有机型上0.5s之内启动完成, 这个为了这个需求费了好大劲, 显示分析页面启动过程中所有的耗时点,  然后重构代码, 延迟加载, 优化布局, 去掉大图片资源, 改为自定义颜色值,  自定义一些布局控件, 减少measure步骤, 等等,  然后再次分析耗时点.    最终基本上在所有手机上实现0.5s内启动.     但很可惜后期的需求又把这个需求覆盖了, 我们现在也提供了启动广告页面展示, 已经不再要求快速启动了.   但仍然在这个过程中, 熟悉了一套优化启动速度的经验.

fragment的引入.  之前的应用版本中没有使用过fragment , 而我们从7.0开始需要一个侧滑菜单, 并且需要支持平板, 所以是一个引入fragment的好契机,  通过引入fragment, 实现了一部分页面的复用逻辑, 像是左侧的侧滑菜单,  在平板上就是常驻的.   实现本身并没有什么难度, 但遇到的问题还是很让人头痛.

一篇博文:http://www.jianshu.com/p/d9143a92ad94

在Activity之外, 还得重新研究fragment的生命周期, 而fragment的生命周期更复杂;

startActivityForResult的返回码需要处理;  在嵌套fragment中收不到这个回调.  新版android已经修复了这个问题

getActivity()返回null; 常发生在内存不足被重启的情况下;  有异步操作没有完成, 而fragment已经detach了.  好的建议是在fragment内部存一个activity实例;

有使会生成两个一样的fragment实例,  给调试带来困难;  -- 什么情况下?  内存重启,  具体可以见:http://www.jianshu.com/p/78ec81b42f92//新版android已经修复了这个问题;   能用replace就不要使用hide() show()

popBackStack 不可靠, 容易导致白屏问题;  --具体原因是内部的bug, 新版本android 已经修复;

Fragment传参, 需要注意, fragment自动重启时参数为空的情况.建议使用setArguments()  但是一些复杂的自定义类对象, 又做不到.

fragment切换动画不如view切换动画好实现;

形成经验:只有在整个页面都需要复用的时候才考虑使用fragment, 而如果是一些局部显示, 优先考虑使用view .   尽量不要使用嵌套fragment; 配合mvp模式, fragment尽量不参与业务逻辑;

总之要轻度使用fragment;

小说的排版,

需求要支持小说阅读页面点击查词功能,  需要动态计算点击位置对应的单词;  同事又要支持阅读页面点击跳转, 这样在实现时, 需要增加标签支持,  这与前面的点击查词功能有些冲突, 实现时非常头痛.

如何点击取词;

如何在TextView中显示链接, 并相应点击事件.

消息推送:

机型适配, 个别小机型崩溃问题定位.用户修改了字体, 用户root刷机之后崩溃, 还有修改了特殊语言之后的崩溃,

SDK开发;

自动化测试方案: 使用jenkins搭建了一个自动化运行平台,  可以自动执行写好的脚本, 验证核心查词接口的功能,

难点是包括jenkins, robotium, 都没有使用过, 需要从0开始,

客户端页面可被后台随时启动功能.  可以根据需要, 随时通过后台唤起客户端的一个页面, 可以是一个展示网页的页面(此时需要把网页地址作为参数传给客户端),  也可以是客户端已经存在的任何一个页面, 比如一本小说详情页, 一个课程页面, 在需要开展促销活动的时候, 提供跳转到这些页面的能力;

入口是后台推送入口和主页预留的活动入口;

需要实现一种后台可配置的启动字符串机制,  最后确定了通过以个json格式的字符串, 来制定要启动的页面, 和附带相应的参数;   这样客户端所有的页面都不需要修改, 只需要在入口处解析出这个命令字符串, 然后跳转到对应的页面;

遇到的困难是, 有些已有的页面需要很复杂的参数, 甚至是一个bean 对象;  所以在给这些activity准备参数的时候就要通过字符串的形式提供, 然后再解析为bean 对象实例.

从某种意义上来说,  就是定义了一种启动页面的协议.

内存泄漏分析:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容