给Android程序员的六个建议

简介: 给Android程序员的六个建议 分类: 安卓相关2015-07-14 23:58 177人阅读 评论(0) 收藏 举报 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. 寻找开源代码的应用 去解决类似你需要的功能或模块. 这个应用可能会用到你不知道的第三方库.
    

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

目录
相关文章
|
18小时前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
3天前
|
云安全 监控 安全
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1000 5
|
10天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
680 40
|
13天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1113 41
|
13天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
816 70
大厂CIO独家分享:AI如何重塑开发者未来十年
|
9天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
497 31
|
16天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
957 59
Meta SAM3开源:让图像分割,听懂你的话
|
1天前
|
机器学习/深度学习 传感器 自动驾驶
具身智能核心突破:物理模拟器与世界模型协同技术拆解
本文系统综述了物理模拟器与世界模型在具身智能发展中的协同作用,提出五级智能机器人分类体系(IR-L0至IR-L4),分析其在运动、操作与交互中的进展,并对比主流仿真平台与世界模型架构,探讨其在自动驾驶与关节机器人中的应用及未来挑战。
160 113