zoukankan      html  css  js  c++  java
  • 【Android归纳】开发中应该注意的事项

    1、子线程中不能更新界面,更新界面必须在主线程中进行

    2、Fragment注意的事项:

    a)  Activity调用Fragment中的方法

    b)  Thread或者Handler调用Fragment中的方法

    须要注意getActivity()可能为空;须要增加以下代码避免空指针

    IfgetActivity() == null || !isAdd(){

             return;

    }

    3、String类型的常量和变量相互比較要使用常量equals变量。由于变量可能为空;

    If(常量.equals(变量)){

       ...

    }

    4、Activity或者Fragment中的BroadCastReceiver设置监听和取消监听要成对出现。

    onReceive方法中调用外部类要判空

    5、网络操作不能在主线程中调用

    6、Activity销毁之前必须先销毁附属在Activity上的Dialog。不能出现Activity销毁后。还操作Dialog对象的情况

    7、使用数据库的时候要注意到数据库死锁的问题。假设数据库没有做同步处理,必须在主线程中调用db保证db不被lock

    8、Try catch 不能使用log打印错误信息,避免出现空指针。

    使用e.printStackTrace()打印错误信息

    9、打开的流资源一定要关闭,比方文件读写,数据库读写

    10、Static引用的Map或者List集合要手动释放,尽量不要使用static引用集合

    11、遍历集合的时候不能对集合进行增删。

    常出如今多线程中

    12、一个方法不能过长,方法过长要拆分成几个方法

    13、推断条件比較多的情况下,尽量使用卫语句代替嵌套条件表达式,比如:

    If(!file.exist()){

        return;

    }

    这样能够避免层次太深,维护代码时更关注主要逻辑,忽略非法情况

    14、Do not keep long-lived references to a context-activity(a reference to an activity should have the same life cycle as the activity itself)

    15、Try using the context-application instead of a context-activity

    16、Avoid nonstatic inner classes in an activity if you don’t control their life cycle,use a static inner class and 

            make a weak reference to the activity inside.The solution to the issue is to use a static inner class with 

            a WeakReference to the outer class, as done in ViewRoot and its W inner class for instance.

            (创建handler的时候要使用static内部类。否则会出现内存泄露)

    17、Android UI 布局中文字使用sp单位,其他的使用dp单位,不能使用px单位

    18、一个方法内层级太深。能够使用卫语句降低层级。能够抽出多个方法。降低代码量

    19、尽量少使用BroadcastReceiver,频繁使用广播会造成

    a) 多对多调用

    b) 传递參数非常任意不受控制

    c) 像指针一样,没有堆栈信息,碰到问题不easy解决

    d) 破坏了类的封装性,违反了高内聚低耦合原则

    20、能不使用Handler的情况下,尽量少使用Handler

    a) 传递參数非常任意不受控制,维护成本高

    b) 异步消息接到后。界面状态须要推断,可能界面已经销毁

    c) 使用了Handler,一定要控制一个类的范围内,不能将Handler传递到其它类中去。由于这样会破坏类的封装性

    d) 像指针一样。没有堆栈信息。碰到问题不easy解决。这条相对BroadcastReceivereasy,由于在一个类内,找起来相对easy

    21、编程要遵循高内聚、低耦合原则。类和类之间要尽量减少耦合性,一个类尽量少的依赖其他类里的属性或者方法

    22、图片管理方法能够採用Universal-image-loader

    23、Boolean型变量前缀使用has或者is

    24、不能使用System.out.println打印log

    25、变量命名不能1,2,3,4...后缀,要看名知意

    26、If方法要有{}包裹

    27、Logtag不能是””

    28、统一使用formatimport格式开发

    29、代码中不能出现硬编码(使用与配置分离,或者通过參数的方式。或者通过面向接口编程)

    Android开发中有时候代码为了方便直接硬编码,事实上这是一种不好的习惯。在PC平台写代码可能直接使用的比較多。在移动平台上有时要考虑多国语言问题,Android设计了getString()方法从资源Res目录中读取String字符串。这些字符串以xml形式保存在Values.xml文件里。Android平台在一定程度上更面向对象。除了Java本身。在构架上仍然使用MVC这种UI和代码逻辑分离。UI能够专心的设计用户界面。代码能够通过类似JarMIDL文件来再发行应用,大大提高了代码复用和维护性。

    上面都是硬编码的坏处。事实上优点也是有的,从单独语言和简单程序来说具有执行效率高和设计简单等方法。可是对于复杂的project还是建议MVC方式设计比較合理。Android对于资源文件进行了缓存机制。在R类中进行全局注冊,也就是说findViewById之后会对这个xml文件做缓存。比方LayoutString

    30、不能在for循环中进行独立的数据库操作

    31、不能使用ScrollView包裹ListView/GridView/ExpandableListVIew;由于这样会把ListView的全部Item都载入到内存中,要消耗巨大的内存和cpu去绘制图面


    以上内容是基于过往开发经验(自己和同事的)进行的总结。如有不妥之处还请指正,欢迎大家一起提出自己的想法,该篇博客我会持续更新...,希望大家共同进步。


  • 相关阅读:
    ASP.NET生成静态页
    IE9下silverlight 里边MessageBox.Show 失效!
    Android与iOS:谁更适合HTML 5?
    编程修改IIS7的MIME类型的问题
    (译)理解“渐进增强(Progressive Enhancement)”
    C# 获取msi文件的ProductCode
    修改chrome浏览器useragent;在电脑上也能打开pad 或者 iphone 的专用网站
    开始的iOS编程之前的准备
    测试博客
    Google Maps Android API v2
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7367702.html
Copyright © 2011-2022 走看看