总结 前辈的重构经验

完成这样的重构,需要几个注意点,分享一下





1 一定要在有充分测试代码的前提下重构

2 测试代码的作用是

1 需求固定了

2 保证重构后逻辑不会发生变化

3 有测试心里有底,可以放心进行大量的结构上的重构





3 重构时,先梳理代码,删除无用的逻辑,进行小的消除重复代码重构,封装小方法重构,等等,目的是让大段大段代码之前的耦合度降低,在这样的基础上才能方便的套用一些合适的代码组织方法(即设计模式),抽取合适的模型等等

这些说起来比较片面需要结合自己的经验看别人的代码或者 重构那本书慢慢积累





另外说几句

1 目前的代码,虽然我很满意,但是肯定还是有不足的地方

比如,如果有代码经验的人看到这些代码,肯定会吐槽出一些需要重构的地方





2 有些代码组织方式没有好坏之分

这种情况下,以团队大部分人的习惯来

针对Android有以下几点需要注意:

1.是不是应该把数据刷新操作放在onResume()中?

@Override
public void onResume() {
super.onResume();
refresh();
}

public  void refresh(){
initData();
}
这样不合适,在什么时候刷新是根据需要来的,并不是每次onResume()的时候都需要刷新。
假如用户关闭了屏幕后再打开屏幕,页面会刷新,这样没有必要,也许几秒中前刚刷新过。


网易新闻客户端就不是这样的。


2.关于activity,fragment与弹窗

如果一个activity中有一个ViewPager,ViewPager中加载了两个fragment,这时要特别注意的是,两个fragment是同事加载的,虽然只显示了一个fragment的界面,但是另外一个也是加载了的,所以如果当前显示的fragment没有弹窗,但是另一个fragment弹窗了也会显示到当前activity中。

3.copy布局文件和复用布局文件的优缺点

重用优点:减少布局文件个数,如果几个界面的布局问个始终一致,那么可以使用
重用缺点:如果其中一个布局文件有所改动,那么其他页面将不能再使用,因为布局文件中没法使用 if else 。


copy优点:一个页面对应一个xml文件,完全解耦
copy缺点:会大量出现重复的代码


总结:需求随时都可能变动,还是把布局解耦比较好


4.优化代码的思路

哪段代码使用的频率越高就应该先优化哪段代码,这样会事半功倍!

5.千万要保护好自己的代码

昨天跟我说某某模块的接口改了,要重新做,我做了。
今天来的时候又跟我说暂时不改了,还是用之前的代码。


天啦,幸亏我没有删掉之前的代码,不然死的心都有了。
so,程序猿们,保护好你自己的代码。


6.模板方法没有写好会很悲剧

模板方法写好了,比如BaseAcitivity,然后开始写它的子类,忽然调试的时候发现模板的方法有问题,比如说要调整方法调用的顺序或者改变方法调用的位置,这下好了,你的N个子类都是按照之前的模板方法去写的,so 你就一个一个去修改子类吧。


另外,要千万注意别人修改了公用的模板方法,要及时pull和push代码,不然自己写的很多代码都白费了。


7.不要频繁重复的调用数据

比如你要获取10-个新闻列表数据,而且你要同一时间去获取,那就得创建10次Http链接,这很费时的。最好的方法是让服务器把10个新闻列表数据写在一个xml文件中,这样会显著的节约时间。wo
so,当进行远程调用时,从数据提供者反复调用取得数据会严重影响性能,比如数据库调用、Web服务调用或者其他编解码调用。这种情况下可以使用Facade模式一次获得所有所需的数据,尽可能减小连接成本和在网络上传输数据的成本。


8.类中的成员变量前加"m"

本类的所有成员变量前加"m",好处是:敲"m"就能提示本类的一些成员变量

9.一定要有自己的技术博客和帖子

别人的博客和帖子是别人的,要有自己的,不断补充,不断完善,以后再查看的时候才方便。
另外 ,强迫自己写技术博客和帖子就是强迫自己总结,加深技术知识的印象。

10.一个类应该纯粹,一个类就只应该做一件事情

比如写一个瀑布流类(自定义View),干了很多事情,布局了瀑布流模型,设置了刷新功能。
这不应该在一个类中出现,瀑布流就是瀑布流,刷新是另外一回事,获取数据又是另外一回事!不要混在一起,写在一个类中!
一个类应该是纯粹的,尽量的简单,就是干一件事情。完成一个功能我们可以把多个类组合在一起,或者引用等等方法。
好处在于拆卸方便,当不需要什么功能的时候能快速明晰的剥离掉。如果什么代码都混在一块那是灰常难以剥离的。


下面是一些经常出现的错误:

1、安装apk文件出现相应的错误

(1)提示错误OLDER_SDK,这表明现有的android的sdk版本太低,应该使用较高版本的sdk。

(2)提示错误UPDATE_INCOMPATIABLE,这表明apk与现有的sdk存在兼容性上的冲突,可以检查一下是否使用了完全一样的skin等参数设置,这些参数与apk应用程序的不一致也会导致安装时候出现错误。

(3) 有时安装apk没有出现错误,但是一运行就出现“程序异常终止”的错误:

原因一般有:应用程序的权限没有设置好,出现了问题;应用程序可能会使用sdcard,而没有挂载sdcard镜像。

(4)目前Android的开发主要是基于800*480(WVQA800)的皮肤,皮肤的不同可能会影响应用程序的兼容性。

2、在模拟器的sdcard镜像插入的图片后,不能通过图片浏览器进行显示。

如果是在android运行的过程中,往sdcard中插入图片,不会立即显示出来,需要重启android虚拟器。

3、开发Android应用程序,容易忽视的一点就是:忘记给应用程序赋予合适的访问权限。<uses-permission>

在通过DDMS模拟GPS定位时,模拟器在install apk之后,始终显示“无法显示物理位置”的错误信息,后来重启一下,就可以了。所以得到启发:如果某个应用程序有一定问题的话,尝试把android重启一下,或许就可以了!

4、android的Google MAP相关内容

(1)Google MAP API的获取

Android Maps API Key Signup

The Android Maps API lets you embed Google Maps in your own Android applications. A single Maps API key is valid for all applications signed by a single certificate.

You also need a Google Account to get a Maps API key, and your API key will be connected to your Google Account.

Android Market enables developers to easily publish and distribute their applications directly to users of Android-compatible phones.

(2)运行android与Google Map相关的应用程序时,提示错误:Failed to find an AVD compatible with target 'Google APIs'.

其实问题在于:之前应用程序加载的都是没有Google api的android21的平台,google api是可选包。所以必须重新创建一个有android和google api的21平台。

5、如何导入Android SDK中的Sample代码

(1)不能通过file->import来加载,因为这里import是已经建立好的工程,而Sample中的只是source文件

(2)所以需要file->new->android project->creating project from existing sample.在下拉框中选择具体的Sample。

注意不能选择creating projects from exisiting source,这样建立的工程是有错误的,没有R.java文件。

(3)出现的没有R.java文件的问题 :

存在这样一种可能:由于res目录的一些xml文件中对于单引号没有使用“/”进行转义,这个还是通过console中的错误提示看出来的。

6、安装改进版本后的apk文件出现如下的错误

Com.xiedong.calendar:

signatures do not match the previously installed version ignoring

Package couldn't not be installed  in /data/ app / com.xiedong.calendar.apk

解决方法:

(1)删除之前建立的avd,然后重新创建,编译和运行

(2)或者在已经存在的avd基础上,启动过程中选择上 wipe user data 如截图所示


下面是一些好的代码库案例:

Android经典的开源项目其实非常多,但是国内的博客总是拿着N年前的一篇复制来复制去,实在是不利于新手学习。今天爬爬把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助。另外,如果你有比较好的项目推荐,也烦请在评论里分享出来,我会定期更新博客内容。

项目篇:
  • Apollo音乐播放器:就一个播放器,但是实现的很好
  • oschina客户端:oschina网站的客户端哦,wp版,iOS版都有开源
  • xabber实时聊天工具(基于xmpp协议):不评价了,反正算是同类中比较好的了
  • 四次元新浪微博客户端:今天才知道是开源的,赶紧收藏
  • Google IO:谷歌开发者大会应用,虽然有点难懂,还是很有参考价值(比如其中的图片加载)
  • eoe客户端:eoe网站Android客户端也开源咯,嘿嘿
  • photup:一个上传图片到facebook的客户端,其中使用了很多开源项目,作者(chrisbanes)本身也非常NB~
组件篇:
  • Android-Flip:可以实现类似FlipBoard那种华丽丽的翻页
  • Drag-Sort-Listview:可以拖动item重新排序的listview,效果非常赞
  • HoloEveryWhere:咳咳,有些同学非常喜欢Android的holo风格,这个项目绝对让你happy
  • Universal-ImageLoader:这个经典的异步图片加载,不多说了
  • JazzyViewPager:这玩意可以让ViewPager翻起来更酷,谁用谁知道~~
  • SlidingMenu:这个是抽屉界面(就是facebook那种)的各种实现版本中,最好的,木有之一!
  • StickyListHeaders:iPhone上经常有这个,就是listview的……不知道怎么解释,自己下载看看吧
  • Android-PullToRefresh:下拉刷新,挺常用的一个组件
  • StaggeredGridView:这是一个瀑布流布局的实现,还不是很完善,但作为学习的案例或者在其基础上扩展还是不错的
  • android-async-http:android的异步请求组件,我个人习惯使用asynctask,不过这个实现还是很优秀的,也推荐给大家
  • ActionBarSherlock:大家熟知的ActionBar在2.x上的兼容性方案;类似的兼容性组件还有许多,有时间为大家一一列出;
  • facebook-android-sdk:不止是一个SDK那么简单哦,比某浪和某人的SDK强几个数量级;
  • NineOldAndroids:想在2.xSDK上使用Android 3.0新增的动画API,那就是它了;没用过的同学一定要试试哦,非常方便~
  • android-swipelistview:让listview的item可以向右滑动,新版Gmail和Pocket里面有用到哦~
  • DataDroid:Android的RESTful封装,没听过RESTful?你去死吧
  • EventBus:和上面的DataDroid同样属于美化底层代码的,这个lib简化了不同组件之间的事件传递
  • android-switch-backport:Android3.0以上才有的switch,有好心人给迁移到2.x上了,哈
  • PagerSlidingTabStrip:最新版的GooglePlay的那个tab效果,可炫可炫了
  • chromeview:我们都知道webview,也知道Android的chrome又自己的内核,这个项目就是把chrome的内核给导出来做成一个chromeview了,大家可以在自己的项目里用,有兴趣的可以玩玩
  • picasso:来自square的图片异步加载,好像是最近才开源的,API风格很独特,哥很喜欢~
  • GlassActionBar:把actionbar做成毛玻璃效果,看上去还是很漂亮的
好吧,大中午的,就先写这些吧~~哦,顺便推荐大家几个网站,我常去的:
  • github:各种项目很多,就是不容易挖掘,但是开发者必备
  • oschina:曾经一般,现在越做越好了,很多开源项目;
  • eoeandroid:经过一番整理,现在非常强大;小作品居多;
  • AndroidViews:我曾经想做这么一个网站来着,很多开源组件的集合,嘿嘿
  • RomainGuy的博客 [大牛]:Android开发组核心成员,主要复制widget开发,我们用的Listview啥的都是这位帅哥写的。
  • 爬爬的博客:欢迎造访,嘿嘿
大家都说github上面的项目不容易发现,但其实还是有办法的,比如:
  • 关注java项目排名:大家戳 这个网址
  • 搜索“Android”,并按star排序:戳 这里 直达
  • 最后,还有一招,就是关注些牛人,他们通常会关注或fork一些很有水平的项目
另外,貌似好多同学不会玩git,给大家推荐一个动态教程,点此链接直达~
(http://www.eoeandroid.com/thread-272453-1-1.html) 很不错

android项目重构经验总结相关推荐

  1. android底层重构,【理论】【转】Android项目重构之路:实现篇

    前两篇文章Android项目重构之路:架构篇和Android项目重构之路:界面篇已经讲了我的项目开始搭建时的架构设计和界面设计,这篇就讲讲具体怎么实现的,以实现最小化可用产品(MVP)的目标,用最简单 ...

  2. 【理论】【转】Android项目重构之路:架构篇

    为什么80%的码农都做不了架构师?>>>    去年10月底换到了新公司,做移动研发组的负责人,刚开始接手android项目时,发现该项目真的是一团糟.首先是其架构,是按功能模块进行 ...

  3. (4.6.30)组件化:Android项目构架演变之路

    文章目录 一.简单开发模型 二.单工程开发模型(业务逻辑分层模型) 2.1 简单开发模型的宏观分层 2.2 MOA原架构模型 2.3 业务层的分层理念与设计模式 2.3.1 分层理念 2.3.2 MV ...

  4. 关于如何正确地在android项目中添加第三方jar包

                  在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception ...

  5. Android项目架构设计深入浅出

    简介:本文结合个人在架构设计上的思考和理解,介绍如何从0到1设计一个大型Android项目架构. 作者 | 璞珂 来源 | 阿里技术公众号 前言:本文结合个人在架构设计上的思考和理解,介绍如何从0到1 ...

  6. Android项目中如何用好构建神器Gradle?

    摘要:本文作者贾吉鑫为大众点评Android工程师,在进行团队并行开发时,分库遇到的问题很多都要通过Gradle脚本解决.Gradle虽为构建神器,但学习曲线比较陡峭,要想在Android项目中用好G ...

  7. (转载) android项目大全,总有你所需的

    目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选      程序员8月书讯      项目管理+代码托管+文档协作,开发更流畅 [置顶] android项目大全,总有你所需的 标签: 源 ...

  8. iOS基于MVC的项目重构总结

    这是一篇关于MVC的介绍的文章,对于这个问题,我曾经感觉自己非常清晰的了解MVC的结构,后来在工作中接触到其他同事,也了解了一些其他语言的MVC,才发现,自己对MVC的理解还是非常的浅显,希望本文能对 ...

  9. IntelliJ 使用Maven构建Android项目过程

    这是我的第一篇博客!对我的意义十分重大!在这篇博客的编写过程就是我在使用Maven构建Android项目中踩过的坑的记录.在此由于本人的水平有限,这篇文章也只能当作经验借鉴而已,希望后来者能够避开这些 ...

最新文章

  1. SQL Server 2008 的CDC功能
  2. SAP S/4 HANA与SAP Business Suite/R3(ECC)的区别
  3. Qt打开文件对话框同时选中多个文件或单个文件
  4. CCNA-第十四篇-NAT-下+链路聚合(LACP)+DHCP
  5. 达梦数据库如何连接MySQL_如何创建达梦数据库
  6. android 播放音乐卡顿,Android MediaPlayer+SeekBar播放音频出现卡顿边长可能问题
  7. 【汇编语言与计算机系统结构笔记18】MIPS指令集与汇编程序设计 异常处理
  8. 2.OAuth 2实战 --- OAuth 之舞
  9. 网站/APP 流量分析、用户访问分析
  10. 猿编程python,python编程猿
  11. OrCAD(二)功能详情与实战总结
  12. SQL连接查询语句(内、外、交叉和合并查询)
  13. cab文件介绍及制作方法 1
  14. 用python画好看的图片,几张好看的HTML图片和利用Python画的好看的图
  15. BMZCTF:insomniteaser_2019_l33t_hoster
  16. 2020 Python中文社区热门文章 Top 10
  17. untiy打包发布WebGL
  18. Java代码关于TIFF/TIF图片转PNG
  19. MySQL之高性能的索引策略(索引优化)
  20. 离职半年了,老东家又发 offer,回不回?

热门文章

  1. 150万奖金:首届6G智能无线通信系统大赛正式上线
  2. 16路4k相机拍照的jpeg照片共有多大
  3. python做游戏服务器_浅谈如何做一个游戏服务器
  4. 带你认识无线组网中的胖瘦AP以及组网场景,了解企业AP部署
  5. 赵小楼《天道》《遥远的救世主》深度解析(58)丁元英听到芮小丹说自已击毙了一个罪犯后心里的那一颤
  6. mysql多表联合查询练习题
  7. 【第三章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】
  8. mysql slap_mysqlslap 压测工具使用说明
  9. uart_ops结构体分析之amba_pl011_pops
  10. 最长不下降子序列O(NlogN) 输出序列