给Android程序员的六个建议

给Android程序员的六个建议

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

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

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

时间: 2024-11-02 22:49:24

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

给Android程序员的一些面试建议

前言 应大家的邀请,写一篇关于Android面试相关的博客,需要说明的是本文只针对Android应用开发,不针对rom开发以及逆向工程.我想面试对于程序员来说是很重要的一件事件,面试结果的好坏直接决定了能否进入某个公司以及以什么级别和待遇进入某个公司.我参加面试的经验并不多,但是以面试官的身份面试别人倒是有很多次,所以我可以结合这些经验来介绍下如何更好地把握一个面试. 什么是合适的候选者 在介绍如何面试之前,这里先从公司的角度来分析:"到底什么样的候选者是公司所需要的技术人才?"就我在

给年后面试的Android程序员的一些面试建议

前言 今天写一篇关于Android面试相关的博客,需要说明的是本文只针对Android应用开发,不针对rom开发以及逆向工程.我想面试对于程序员来说是很重要的一件事件,面试结果的好坏直接决定了能否进入某个公司以及以什么级别和待遇进入某个公司.我参加面试的经验并不多,但是以面试官的身份面试别人倒是有很多次,所以我可以结合这些经验来介绍下如何更好地把握一个面试. 什么是合适的候选者 在介绍如何面试之前,这里先从公司的角度来分析:"到底什么样的候选者是公司所需要的技术人才?"就我在百度的一些

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

每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换取编程速度.擅长利用轮子的程序员已经遥遥领先,不擅长利用轮子的程序员总是嫌前人发明的轮子不够圆,自己造个方轮子上路后才发现落后了. 作者:玖哥来源:51CTO|2017-10-19 16:06 移动端 收藏 分享 [51CTO.com原创稿件]每个Android 程序员都不是Android应用开发之

挨踢部落故事汇(20):Android程序员的十大转型之路

玖哥是一个来自东北的Android攻城狮,现在定居被誉为"大湖名城,创(chuan)新(xiao)高地"的合肥.知识面极广,不仅广泛涉猎IT相关知识,还热爱文学,性格幽默,被誉为"会搞Android的段子手".他还是一个藏书人士,拥有汗牛充栋的IT书籍,而且每本书都认真阅读过,从不拿书当摆设. 玖哥·Android攻城狮 先说说Android程序员不可能转型的几个方向,以下四个不靠谱方向的靠谱性递减: 首先不会转型iOS,iOS和Android工程师的工作内容都是大

Android程序员学习之路

和一些刚工作以及未毕业的同学沟通,很多同学对在没有工作机会或熟练Android人员指导的情况下,如何学习Android并提高Android水平比较关心.下面我从几个方面介绍一些方法和方式来和大家分享: 1.Android知识 1.1.网站资源 1.1.1.Android官网 这个是最权威最官方的.主要看设计篇 和开发篇 .API相关接口用到哪一个接口再去看.不用挨个看.当然现在可能会被墙,大家也可以看本地SDK目录下的docs中的index.html打开后的文档. 1.1.2.stackover

据说年薪30万的Android程序员必须知道的帖子

据说年薪30万的Android程序员必须知道的帖子 标签: android 2015-03-12 16:52 10443人阅读 评论(10) 收藏 举报 Android中国开发精英 目前包括: Android开源项目第一篇——个性化控件(View)篇       包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipVi

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

1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用的工具类,到后来Google开源的比较完善丰富的Volley,再到如今比较流行的Okhttp.Retrofit. 要想理解他们之间存在的异同(或者具体点说,要想更深入地掌握Android开发中的网络通信技术),必须对网络基础知识.Android网络框架的基本原理等做到心中有数.信手拈来,关键时刻才能

@Android程序员,请掌握这些核心生存技能!

大佬你好,作为一个Android开发者,在学习过程中有什么需要注意的? 这个问题其实也不太好回答,因为要注意的问题蛮多的,多得就像雾霾中的颗粒.不过,有趣的是,流年似水这两次的提问中,对我的称呼大有不同. 再说,我也不是什么"大佬",无非比较接地气一点,喜欢和大家交流分享的感觉而已. 那么接下来,我就针对这个提问,做一些回答.希望对有类似问题的同学起到一个参考的作用.将以以下几个方面做出回答: 1.不断学习2.分享一下我的学习方法3.移动开发者核心生存技能(高能!) 为什么要不断学习

给php程序员的40条建议 优化你的php代码(一)【转载】

给php程序员的40条建议 优化你的php代码,这些经验是资深php程序员多年的积累结果,经验之谈,对php开发者有很好的指导意义!搜集如下,可以时常翻出来看看. 1.echo 比 print 快. 2.尽量避免使用__get,__set,__autoload. 3.$row[‘id’]的效率是$row[id]的7倍. 4.尽量采用大量的PHP内置函数. 5.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍. 6.如果一个方法可