Android 代码重构的经验

转自:http://blog.csdn.net/menxu_work/article/details/9345349

 

总结 前辈的重构经验

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



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应用程序,容易忽视的一点就是:忘记给应用程序赋予合适的访问权限。

在通过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 如截图所示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值