分类: 安卓相关2015-07-14 23:58 177人阅读 评论(0) 收藏 举报

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

  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. 寻找开源代码的应用 去解决类似你需要的功能或模块. 这个应用可能会用到你不知道的第三方库.

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

给Android程序员的六个建议的更多相关文章

  1. 给Android程序猿的六个建议

    假设你一年前写的代码 , 在如今看来你还感觉写的非常不错 , 那么说明你学习的不够多. 不要在Context中持有静态引用 public class MainActivity extends Loca ...

  2. IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

    每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换 ...

  3. Android 程序员必须知道的 53 个知识点

    1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式 ...

  4. Android程序员必知必会的网络通信传输层协议——UDP和TCP

    1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯技术这一块)的开发者来说,网络编程是基础中的基础,只有更好地理解相关基础知识,对于应用层的开发才能做到游刃有余. 对于Android ...

  5. 迈向高阶:优秀Android程序员必知必会的网络基础

    1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用 ...

  6. (转载) 据说年薪30万的Android程序员必须知道的

    据说年薪30万的Android程序员必须知道的帖子 标签: android 2015-03-12 16:52 28705人阅读 评论(14) 收藏 举报 Android中国开发精英 目前包括: And ...

  7. 面试利器!字节跳动2021年Android程序员面试指导小册已开源

    整份手册分为两个部分,分别是:Java部分.Android部分.数据结构与算法篇.字节跳动2020年全年面试题总结篇! 每个知识点都有左侧导航书签页,看的时候十分方便,由于内容较多,这里就截取一部分图 ...

  8. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  9. Android高薪之路-Android程序员面试宝典

    Android高薪之路-Android程序员面试宝典

随机推荐

  1. Andorid中的HAL

    参考文章: http://blog.csdn.net/luoshengyang/article/details/6567257

  2. [译]ASP.NET 性能监控

    概述:在性能测试中性能监视器是非常强大的工具,本文主要简述了几个关键的计数器和相关的阈值. 监控性能计数器 很多的性能计数器在性能调优中是非常重要的,由于性能计数器太多,很多人不知道选择那些计数器. ...

  3. C语言位运算详解(转载)

    转载自:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C ...

  4. matlab练习程序(矩形变换为单连通形状)

    变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...

  5. SU Demos-02Filtering-03Sudipfilt

    不足之处,欢迎各位博友批评指正. 进入目录,依照惯例先看Readme, 第一个脚本, 下面是运行结果: 第二个脚本: 运行结果如下: 第三个脚本: 运行结果:

  6. js:数据结构笔记9--二叉树

    树:以分层的方式存储数据:节点:根节点,子节点,父节点,叶子节点(没有任何子节点的节点):层:根节点开始0层: 二叉树:每个节点子节点不超过两个:查找快(比链表),添加,删除快(比数组): BST:二 ...

  7. JavaScript,一个超级简单的方法判断浏览器的内核前缀

    先说明,此处的方法是说超级简单的方法,不是指代码超级少,而是用非常简单的知识点,只要懂得怎么写JavaScript的行内样式就可以判断. 大家应该还记得JavaScript行内样式怎么写吧?(看来我是 ...

  8. 【POJ】A New Stone Game(博弈论)

    http://poj.org/problem?id=1740 题目大意就是,对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分 ...

  9. BZOJ3339 Rmq Problem

    [bzoj3339]Rmq Problem Description Input Output Sample Input 7 5 0 2 1 0 1 3 2 1 3 2 3 1 4 3 6 2 7 Sa ...

  10. android之数据库SQLite(一)

    创建数据库 首先定义SQLiteOpenHelper的子类 代码如下: package com.example.myandroid; import android.content.Context; i ...