zoukankan      html  css  js  c++  java
  • 给Android程序员的六个建议

    给Android程序员的六个建议

    分类: 安卓相关

    如果你一年前写的代码 , 在现在看来你还感觉写的很不错 , 那么说明你学习的不够多.

    1. 不要在Context中持有静态引用

      
      public class MainActivity extends LocationManagingActivity implements ActionBar.OnNavigationListener,
              GooglePlayServicesClient.ConnectionCallbacks,
              GooglePlayServicesClient.OnConnectionFailedListener {
          //...
          private static MeTrackerStore mMeTrackerStore; 
          //...
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              //...
              mMeTrackerStore = new MeTrackerStore(this);
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

      这个毛病可能很多人都会犯过 , 如果MeTrackerStore通过构造持有activity的引用 , 那这个activity就永远不会被垃圾回收.(除非静态变量被重新分配至不同的activity)

      这是因为MeTrackerStore 是静态的 , 而对于静态变量的存储, 当应用程序启动 , 不收集 , 知道退出该应用程序正在运行的进程 .

      注: 从技术层面来说 , 你可以持有一个静态应用的 application context , 这样不会造成内存泄露 , 但不建议这么做

    2. 注意控制”隐性引用”对象的生命周期

      
      public class DefineGeofenceFragment extends Fragment {
          public class GetLatAndLongAndUpdateMapCameraAsyncTask extends AsyncTask<String, Void, LatLng> {
      
              @Override
              protected LatLng doInBackground(String... params) {
                  //...
                  try {
                      //Here we make the http request for the place search suggestions
                      httpResponse = httpClient.execute(httpPost);
                      HttpEntity entity = httpResponse.getEntity();
                      inputStream = entity.getContent();
                      //..
                  }
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

      这段代码有很多问题 , 我们把终点放在隐式引用 . 在Java中 , 对于包含静态内部类的类 , 非静态内部类具有隐式引用.

      本段代码中 , 对与外部类DefineGeofenceFragment 将持有一个 GetLatAndLongAndUpdateMapCameraAsyncTask 引用

      对与包含内部类的外部类来说 , 他们有一个隐含的引用包含匿名类的类的实例 , 该GetLatAndLongAndUpdateMapCameraAsyncTask 有一个隐含的引用片段

    3. Android Studio 让你更快捷, 更舒服 
      AS提供的快捷键和live templates,会让你写起代码飞快,目前Android Studio已经可以支持NDK开发,日后会有越来越多的人喜欢Andriod Studio并使用它来开发。

    4. 一个方法只做一件事 
      有一个在我写这超过100行的类之一的方法。这样的方法难以阅读,修改和重新使用。试着写的方法只能做一件事。通常情况下,这意味着你应该怀疑的是超过20行代码的方法。在这里,你可以招募的Android Studio来帮助你发现问题的方法。
    5. 向比你有经验的人学习 
      这可能听起来微不足道,但它是一个错误,我做的时候,我写我的第一个应用程序。 
      当你写一个应用程序,你会犯错误。其他人已经取得了这些错误。从这些人的了解。你是在浪费你的时间,如果你重复别人的可以避免的错误。我浪费了大量的时间在我的第一个应用程序使得我本来可以避免,如果我只是花了一点时间,从经验丰富的软件开发人员学习错误。 
      阅读程序员修炼。然后阅读有效的Java。这两本书将帮助你避免我们作出开发新手常犯的错误。当你与那些书做,不停地寻找聪明的人学习的榜样。

    6. 多使用第三方库 
      当你写一个应用时 , 你可能会遇到更聪明 , 更有经验的人已经解决了你的需求或问题. Android 有很多开源库 , 我们可以多利用他们。 
      在我的应用中 , 我经常使用第三方库提供的功能 , 比如 Retrofit 和 Picasso . 如果你不确定你需要哪种类型或功能的库 , 下面介绍一下比较流行的几款库:

      1.  Google 广播 (http://fragmentedpodcast.com/episodes/9/) , 告诉你什么情况 使用什么库 , 例如 Dagger Retrofit Picasso 和 Mockito
      2. 订阅Android周刊 . 他们会给你推送最新的第三方库或比较最新 , 最近比较流行的设计模式及功能.
      3. 寻找开源代码的应用 去解决类似你需要的功能或模块. 这个应用可能会用到你不知道的第三方库.
      

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    网站备份list
    vnc checklist
    appnode iptables 规则后面覆盖前面的
    Appnode + Discuz checklist
    解决WORD文档无法显示链接的图像问题
    应用容器Application container
    要研究的内容
    转 Flex MXML编译成AS类
    Flex文件结构
    int a
  • 原文地址:https://www.cnblogs.com/u0mo5/p/4647734.html
Copyright © 2011-2022 走看看