给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);
        }
    }
    

    这个毛病可能非常多人都会犯过 , 假设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();
                    //..
                }
            }
        }
    }
    

    这段代码有非常多问题 , 我们把终点放在隐式引用 . 在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. 寻找开源码的应用 去解决相似你须要的功能或模块. 这个应用可能会用到你不知道的第三方库.
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115653.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中线程安全的容器_jfinal容器线程安全吗

    java中线程安全的容器_jfinal容器线程安全吗四、线程安全的容器类Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。1.Map在Map类中,提供两种线程安全容器。java.util.HashtableHashtable和HashMap类似,都是散列表,存储键值对映射。主要区别在于Hashtable是线程安全的。当我们查看Hashtable源码的时候,可以看到Hashtable的方法都是通过syn

    2025年11月4日
    2
  • C++路标设置「建议收藏」

    C++路标设置「建议收藏」B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。现在政府决定在公路上增设一些路标,使得公路的“空旷指数”最小。他们请求你设计一个程序计算能达到的最小值是多少。请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。输入格式:第1行包括三个数l(0<l≤1000,000,00

    2022年8月12日
    8
  • pycharm: 前进/回退到上一个操作的地方

    pycharm: 前进/回退到上一个操作的地方View–>toolbar打开工具栏,里面有前进和后退到上一位置的跳转键,非常实用。view–>ToolButtons打开左侧的structure

    2022年8月29日
    3
  • 等价类划分法设计用例(超详细)「建议收藏」

    等价类划分法设计用例(超详细)「建议收藏」等价类划分法等价类:1、解决了不能穷举测试的问题、控制成本、控制测试用例数量2、数据值要明确,对文字敏感3、依据需求将输入划分为若干个等价类,划分等价类(需求、数据特征)等价类设计用例的难点:如何根据时间成本划分等价类等价类分为:           1、有效等价类           2、无效等价类如上图可以划分为:                 有效等价类1:[-99,99]                 无效等价类2:<-99                 无效等

    2022年10月18日
    2
  • SpringBoot常见面试问题

    SpringBoot常见面试问题博客转载自:https://blog.csdn.net/ityouknow/article/details/96533522随着SpringBoot使用越来越广泛,SpringBoot已经成为Java程序员面试的知识点,很多同学对SpringBoot理解不是那么深刻,经常就会被几个连环跑给干趴下了!比如下面这一段的SpringBoot问答:问:你觉得S…

    2022年6月4日
    38
  • java垃圾回收机制原理_java垃圾回收的缺点

    java垃圾回收机制原理_java垃圾回收的缺点  最近做一个ETL的项目模块,经常由于查询数据量比较大用消息中间件MQ时引起了内存溢出的报错。做完后没事研究了一下JVM和垃圾回收的相关知识点。一:垃圾回收机制的意义java 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额对象不在有“作用域”的概念,只有…

    2022年10月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号