iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >解析Android开发优化之:从代码角度进行优化的技巧
  • 533
分享到

解析Android开发优化之:从代码角度进行优化的技巧

技巧android开发优化Android 2022-06-06 10:06:26 533人浏览 安东尼
摘要

通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的。一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构。重构的

通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的。一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构。重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能。下面我们就从几个方面来了解Android开发过程中的代码优化。

1)静态变量引起内存泄露

在代码优化的过程中,我们需要对代码中的静态变量特别留意。静态变量是类相关的变量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁。所以,一般情况下,静态变量从所在的类被使用开始就要一直占用着内存空间,直到程序退出。如果不注意,静态变量引用了占用大量内存的资源,造成垃圾回收器无法对内存进行回收,就可能造成内存的浪费。

先来看一段代码,这段代码定义了一个Activity。
代码如下:
private static Resources mResources; 

@Override

protected void onCreate(Bundle state) {

super.onCreate(state);

if (mResources == null) {

    mResources = this.getResources();

    }

}

这段代码中有一个静态的Resources对象。代码片段mResources = this.getResources()对Resources对象进行了初始化。这时Resources对象拥有了当前Activity对象的引用,Activity又引用了整个页面中所有的对象。

如果当前的Activity被重新创建(比如横竖屏切换,默认情况下整个Activity会被重新创建),由于Resources引用了第一次创建的Activity,就会导致第一次创建的Activity不能被垃圾回收器回收,从而导致第一次创建的Activity中的所有对象都不能被回收。这个时候,一部分内存就浪费掉了。

经验分享:

在实际项目中,我们经常会把一些对象的引用加入到集合中,如果这个集合是静态的话,就需要特别注意了。当不需要某对象时,务必及时把它的引用从集合中清理掉。或者可以为集合提供一种更新策略,及时更新整个集合,这样可以保证集合的大小不超过某值,避免内存空间的浪费。
 

2)使用Application的Context

在Android中,Application Context的生命周期和应用的生命周期一样长,而不是取决于某个Activity的生命周期。如果想保持一个长期生命的对象,并且这个对象需要一个Context,就可以使用Application对象。可以通过调用Context.getApplicationContext()方法或者Activity.getApplication()方法来获得Application对象。

依然拿上面的代码作为例子。可以将代码修改成下面的样子。
代码如下:
private static Resources mResources; 

@Override

protected void onCreate(Bundle state) {

super.onCreate(state);

if (mResources == null) {

    // mResources = this.getResources();

    mResources = this.getApplication().getResources();

    }

}

在这里将this.getResources()修改为this.getApplication().getResources()。修改以后,Resources对象拥有的是Application对象的引用。如果Activity被重新创建,第一次创建的Activity就可以被回收了。

3)及时关闭资源

Cursor是Android查询数据后得到的一个管理数据集合的类。正常情况下,如果我们没有关闭它,系统会在回收它时进行关闭,但是这样的效率特别低。如果查询得到的数据量较小时还好,如果Cursor的数据量非常大,特别是如果里面有Blob信息时,就可能出现内存问题。所以一定要及时关闭Cursor。

下面给出一个通用的使用Cursor的代码片段。
代码如下:
Cursor cursor = null;

try{

    cursor = mContext.getContentResolver().query(uri,null,null,null,null);

    if (cursor != null) {

        cursor.moveToFirst();

        // 处理数据

    }

} catch (Exception e){

    e.printStatckTrace();

} finally {

    if (cursor != null){

        cursor.close();

    }

}

即对异常进行捕获,并且在finally中将cursor关闭。

同样的,在使用文件的时候,也要及时关闭。

4)使用Bitmap及时调用recycle()

前面的章节讲过,在不使用Bitmap对象时,需要调用recycle()释放内存,然后将它设置为null。虽然调用recycle()并不能保证立即释放占用的内存,但是可以加速Bitmap的内存的释放。

在代码优化的过程中,如果发现某个Activity用到了Bitmap对象,却没有显式的调用recycle()释放内存,则需要分析代码逻辑,增加相关代码,在不再使用Bitmap以后调用recycle()释放内存。

5)对Adapter进行优化

下面以构造ListView的BaseAdapter为例说明如何对Adapter进行优化。

在BaseAdapter类中提供了如下方法:
代码如下:
public View getView(int position, View convertView, ViewGroup parent)

当ListView列表里的每一项显示时,都会调用Adapter的getView方法返回一个View,

来向ListView提供所需要的View对象。

下面是一个完整的getView()方法的代码示例。
代码如下:
public View getView(int position, View convertView, ViewGroup parent) {

  ViewHolder holder;

if (convertView == null) {

      convertView = mInflater.inflate(R.layout.list_item, null);

      holder = new ViewHolder();

      holder.text = (TextView) convertView.findViewById(R.id.text);

      convertView.setTag(holder);

  } else {

      holder = (ViewHolder) convertView.getTag();

  }

  holder.text.setText("line" + position);

  return convertView;

}

 

private class ViewHolder {

  TextView text;

}

当向上滚动ListView时,getView()方法会被反复调用。getView()的第二个参数convertView是被缓存起来的List条目中的View对象。当ListView滑动的时候,getView可能会直接返回旧的convertView。这里使用了convertView和ViewHolder,可以充分利用缓存,避免反复创建View对象和TextView对象。

如果ListView的条目只有几个,这种技巧并不能带来多少性能的提升。但是如果条目有几百甚至几千个,使用这种技巧只会创建几个convertView和ViewHolder(取决于当前界面能够显示的条目数),性能的差别就非常非常大了。   

6)代码“微优化”

当今时代已经进入了“微时代”。这里的“微优化”指的是代码层面的细节优化,即不改动代码整体结构,不改变程序原有的逻辑。尽管Android使用的是Dalvik虚拟机,但是传统的Java方面的代码优化技巧在Android开发中也都是适用的。

下面简要列举一部分。因为一般Java开发者都能够理解,就不再做具体的代码说明。

创建新的对象都需要额外的内存空间,要尽量减少创建新的对象。

将类、变量、方法等等的可见性修改为最小。

针对字符串的拼接,使用StringBuffer替代String。

不要在循环当中声明临时变量,不要在循环中捕获异常。

如果对于线程安全没有要求,尽量使用线程不安全的集合对象。

使用集合对象,如果事先知道其大小,则可以在构造方法中设置初始大小。

文件读取操作需要使用缓存类,及时关闭文件。

慎用异常,使用异常会导致性能降低。

如果程序会频繁创建线程,则可以考虑使用线程池

经验分享:

代码的微优化有很多很多东西可以讲,小到一个变量的声明,大到一段算法。尤其在代码Review的过程中,可能会反复审查代码是否可以优化。不过我认为,代码的微优化是非常耗费时间的,没有必要从头到尾将所有代码都优化一遍。开发者应该根据具体的业务逻辑去专门针对某部分代码做优化。比如应用中可能有一些方法会被反复调用,那么这部分代码就值得专门做优化。其它的代码,需要开发者在写代码过程中去注意。

您可能感兴趣的文章:Android编程之文件读写操作与技巧总结【经典收藏】Android编程之OpenGL绘图技巧总结Android编程常用技巧实例总结Android编程开发之性能优化技巧总结Android Studio使用小技巧:提取方法代码片段Android Studio使用小技巧:自定义LoGCatAndroid开发技巧之我的菜单我做主(自定义菜单)android 为应用程序创建桌面快捷方式技巧分享Android开发技巧之像QQ一样输入文字和表情图像Android Studio使用小技巧:布局预览时填充数据Android开发中常用的一些小技巧Android实用编程技巧代码总结


--结束END--

本文标题: 解析Android开发优化之:从代码角度进行优化的技巧

本文链接: https://www.lsjlt.com/news/27796.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android开发优化的技巧有哪些
    Android开发的优化技巧有很多,以下是一些常见的优化技巧: 减少内存使用:避免使用过多的内存,可以使用对象池、缓存和适当的内存...
    99+
    2023-10-24
    Android
  • JavaScript代码优化的技巧实例分析
    本篇内容主要讲解“JavaScript代码优化的技巧实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript代码优化的技巧实例分析”吧!写在前面想要做到JavaScript的代...
    99+
    2023-07-02
  • 如何对网站的SEO优化进行多角度分析
    这篇文章主要介绍如何对网站的SEO优化进行多角度分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  在进行seo优化的过程中,我们还要对各种情况都进行合理的分析,真正的去认识到整个网站的一些情况,这样在今后优化过程...
    99+
    2023-06-10
  • PHP Docker 进阶技巧:优化您的开发流程
    使用 Docker Compose 管理多个容器 Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它允许您将多个相关容器定义在一个YAML文件中,并使用一个命令启动和管理它们。 version: "3...
    99+
    2024-02-03
    PHP Docker Docker Compose Docker Volumes Docker Networks Docker Swarm
  • 如何理解Android编程开发中的性能优化技巧
    这篇文章给大家介绍如何理解Android编程开发中的性能优化技巧,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。性能优化正常的流程是,发现自己某方面与竞品差距比较大,比如UI渲染速度,需要通过某种方式去发现为什么比别人慢...
    99+
    2023-06-17
  • PHP开发中的技巧:巧妙使用default参数优化代码逻辑
    PHP开发中的技巧:巧妙使用default参数优化代码逻辑 在PHP开发中,我们经常会遇到需要处理各种不同情况的代码逻辑。为了提高代码的可读性、简洁性和易维护性,我们可以巧妙地运用de...
    99+
    2024-04-02
  • 从 NPM 到 Laravel,PHP 开发者必须知道的响应速度优化技巧!
    在今天的互联网时代,网站的响应速度已经成为了用户使用的重要因素之一。特别是对于在线购物、金融支付等领域,速度更是关系到用户体验和安全性。因此,作为 PHP 开发者,我们必须要掌握一些响应速度优化的技巧,以提升网站的用户体验和安全性。 本文...
    99+
    2023-07-07
    laravel npm 响应
  • 优化PHP响应速度:从索引到并发的技巧与实践
    PHP是一种广泛使用的服务器端脚本语言,它可以用于开发各种类型的Web应用程序。然而,PHP应用程序的响应速度是一个重要的问题,因为它直接影响用户的体验。在本文中,我们将介绍一些优化PHP响应速度的技巧和实践,从索引到并发都有所涉及。 一...
    99+
    2023-07-01
    响应 索引 并发
  • 如何进行Nginx内核优化的源代码分析
    如何进行Nginx内核优化的源代码分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Nginx内核优化在不断的使用中有很多的问...
    99+
    2024-04-02
  • 10 个 JavaScript 代码优化技巧,让你的网站速度飙升
    减少不必要的 JavaScript 文件加载 尽量避免加载不必要的 JavaScript 文件,特别是对于页面加载速度非常关键的页面。可以使用一些工具来分析 JavaScript 文件的加载顺序和影响,并根据分析结果移除不必要的加载...
    99+
    2024-02-27
    JavaScript 代码优化、网页速度、性能优化、代码质量、浏览器解析
  • Python开发经验分享:如何进行代码重构和优化
    Python开发经验分享:如何进行代码重构和优化引言:随着软件开发的不断发展,代码的重构和优化已成为开发过程中不可或缺的一环。而Python作为一门动态、简洁的高级编程语言,也同样需要进行代码重构和优化来提高程序的性能和可维护性。本文将分享...
    99+
    2023-11-22
    Python 优化 重构
  • 从存储角度看 ASP IDE 的接口设计:如何优化开发效率?
    ASP IDE 是一款常用的开发工具,它的接口设计对于开发效率有很大的影响。从存储角度出发,我们来探讨如何优化 ASP IDE 的接口设计,提高开发效率。 一、存储角度的设计考虑 1.1 数据存储方式的选择 在设计 ASP IDE 的接口时...
    99+
    2023-10-15
    ide 接口 存储
  • 优化CSS选择器:提升网页开发效率的常用代码技巧
    提高网页开发效率:掌握常用CSS代码基本选择器的优化技巧导语:在网页开发中,CSS是必不可少的一部分。掌握常用的CSS代码基本选择器和优化技巧能够提高开发效率,减少代码量,并且使得网页加载更快。本文将介绍一些常用的CSS代码基本选择器及其优...
    99+
    2023-12-26
    优化技巧 网页开发效率 CSS代码选择器
  • JavaScript 代码优化指南:从新手到专家的进阶之路
    一、JavaScript 代码优化的重要性 JavaScript 是当今最受欢迎的编程语言之一,用于构建各种 Web 应用程序和网站。但是,随着应用程序变得越来越复杂,JavaScript 代码也变得越来越长且难以管理。如果代码没有经过...
    99+
    2024-02-27
    JavaScript、代码优化、性能优化、重构、错误减少
  • 面向前端开发人员的14个JavaScript代码优化技巧是怎样的
    这期内容当中小编将会给大家带来有关面向前端开发人员的14个JavaScript代码优化技巧是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。用户访问网站设备的硬件规格...
    99+
    2024-04-02
  • ASP 函数打包开发技术:如何优化您的代码?
    ASP 函数是一种非常有用的开发技术,可以帮助您在 ASP 网页中实现各种功能。然而,当您的代码越来越复杂时,您可能会发现自己需要编写越来越多的函数,这会导致您的代码变得冗长和难以维护。在这篇文章中,我们将介绍一种称为“函数打包”技术的方...
    99+
    2023-06-27
    函数 打包 开发技术
  • 前端网络、JavaScript优化以及开发小技巧的示例分析
    这篇文章给大家分享的是有关前端网络、JavaScript优化以及开发小技巧的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、网络优化YSlow 有23条规则。这几十条规则最主要是在做消除或减少不必要的网...
    99+
    2023-06-08
  • Laravel 中的响应速度优化,PHP 开发者必须知道这些技巧!
    Laravel 是一款受欢迎的 PHP 框架,拥有强大的功能和易用的 API。然而,随着应用程序的增长,响应速度的问题也会逐渐浮现。在本文中,我们将讨论 Laravel 中的响应速度优化技巧,帮助 PHP 开发者更好地了解如何优化自己的应...
    99+
    2023-07-07
    laravel npm 响应
  • 从PMD工具的规则检测规则学习代码优化技巧有哪些
    这篇文章的内容主要围绕从PMD工具的规则检测规则学习代码优化技巧有哪些进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!讲起静态代码分析工具,估计大家耳...
    99+
    2023-06-17
  • 如何优化PHP开发中的代码执行效率和性能
    随着互联网的高速发展,PHP作为一门扎根于网络开发的脚本语言,被广泛应用于网页开发、服务器编程等领域。然而,PHP代码执行效率和性能问题一直是开发者们面临的挑战。在本文中,我们将探讨如何通过优化PHP代码来提高执行效率和性能,同时给出具体的...
    99+
    2023-10-21
    优化 PHP 代码执行
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作