`
nick714
  • 浏览: 26117 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android避免context相关内存溢出

 
阅读更多

      手机都有一定的内存限制,比如G1,只有16M的堆内存限制。作为手机开发者,在开发的时候,应该尽可能的节约内存。Android系统内存保存的应用越多,那么用户在使用时程序切换也就越快。其实,很多的内存溢出都有一个共同的特点,那就是,和Context相关的东西长期没有得到释放。

      在Android上,一个Context用于很多操作,最多是用来加载和使用资源。这也是为什么很多widgets 都有一个Context参数的构造方法。Android应用中通常有两种Context,Activity and Application。通常程序员调用类和方法都用到第一个Context.

      请看下面一段代码:

      @Override

 

protected void onCreate(Bundle state) {
  super.onCreate(state);
  
  TextView label = new TextView(this);
  label.setText("Leaks are bad");
  
  setContentView(label);
}

这里意味着views和整个activity都联系在一起了,那么当我们进行横竖屏切换时,默认情况的横竖屏切换会销毁

当前Activity并记住它的状态,然后系统会重新加载Activity至当前状态,如果你的应用里面含有很大的图片的话,那么它会

再次进行加载,这个时候最好的方法,就是使这个量成为一个静态变量:

 

private static Drawable sBackground;
  
@Override
protected void onCreate(Bundle state) {
  super.onCreate(state);
  
  TextView label = new TextView(this);
  label.setText("Leaks are bad");
  
  if (sBackground == null) {
    sBackground = getDrawable(R.drawable.large_bitmap);
  }
  label.setBackgroundDrawable(sBackground);
  
  setContentView(label);
}
  这段代码就会比较健壮了,当切换横竖屏的时候,图片就不会重新加载了。
  防止Context相关内存溢出有两个比较简单的方法,一种可以像上面这样,另外一种使用Application的Context.
  总结:
      1.Activity的变量应该和该Activty有一样的生命周期
      2.试着使用Application的Context
      3.避免在Activity中使用非静态类,如果你不控制该类的生命周期的话。可以创建一个静态内部类,并且在
        Activity里使用一些weak reference ,这个观点的解决办法就是在外部类中使用 WeakReference管理        类。
     4.垃圾回收器不是对内存的保险。

 

分享到:
评论

相关推荐

    Android防止内存溢出浅析.zip

    在Android应用开发中,内存溢出(Out Of Memory,简称OOM)是一个常见的问题,它会导致应用崩溃,严重影响用户体验。理解并防止Android应用中的内存溢出是优化应用性能的关键环节。以下是对Android防止内存溢出的...

    Android防止内存溢出浅析

    在Android开发中,防止内存溢出是一个至关重要的任务,因为Android设备的内存资源相对有限,尤其是在Dalvik虚拟机中,其最大堆大小通常只有16MB。本文将深入探讨Android平台上的内存管理机制,以及如何避免内存泄露...

    Android的内存机制和溢出说明

    内存溢出(OutOfMemoryError)是Android开发中常见的问题,特别是在处理大尺寸的位图(Bitmap)时。由于Android设备的内存有限,长时间持有资源的引用会导致内存无法被回收,从而引发内存泄露。内存泄露不仅浪费资源...

    android内存的溢出和泄漏问题

    在Android开发中,内存管理是至...因此,Android开发者必须密切关注内存管理,通过合理使用convertView、及时关闭资源、正确处理对象引用以及适当地回收Bitmap等,来避免内存溢出和内存泄漏,确保应用的稳定性和性能。

    安卓Android源码——防止内存溢出浅析.zip

    在安卓(Android)开发中,内存管理是至关重要的一个环节,因为不当的内存使用可能导致应用程序崩溃或者性能下降,其中最常见的问题就是内存溢出(Out of Memory,简称OOM)。本资料包"安卓Android源码——防止内存...

    Android webview 内存泄露的解决方法

    Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递...

    Android应用源码之防止内存溢出浅析.zip

    下面,我们将深入探讨Android应用中内存溢出的原因、检测以及如何通过优化源码来避免。 1. 内存溢出原因: - 大量对象创建:短时间内大量创建对象,尤其是大型对象,会迅速消耗掉有限的内存资源。 - 静态变量持有...

    Android内存溢出及内存泄漏原因进行

    理解并掌握这些原则可以帮助开发者有效地防止Android应用中的内存溢出和内存泄漏,提高应用的稳定性和性能。在实际开发中,还可以利用工具如Android Profiler进行内存分析,帮助定位和修复这些问题。

    ListView加载网络图片,防止内存溢出

    当一个Android应用分配的内存超过系统允许的最大限制时,就会发生内存溢出。在ListView中加载网络图片时,每个ImageView都会加载整个图片到内存,如果图片尺寸过大或数量过多,就可能导致内存占用过多。 解决这个...

    android内存及内存溢出分析详解

    然而,Android应用中存在内存溢出的问题,尤其是对于内存有限的Dalvik虚拟机。 内存溢出通常由两方面原因引起: 1. 内存泄露:程序错误导致某些资源(如Context)的引用长期保持,使得这些资源无法被正常释放。例如...

    android有效解决图片过大内存溢出的问题

    ### Android有效解决图片过大内存溢出的问题 #### 一、问题背景 在Android开发过程中,尤其是在涉及大量图片处理的应用程序中,经常会遇到内存溢出的问题。这是因为Android设备的内存资源有限,而图片作为数据量较...

    android 解决ViewPager加载大量图片内存溢出问题

    然而,当ViewPager中加载大量图片时,如果不进行优化,很容易导致内存溢出(Out of Memory,OOM)的问题。这是因为Android系统为每个可见页面都加载了图片资源,随着用户滑动,内存中会积累过多的图片对象,从而消耗...

    Android编程内存溢出与防范方法浅析

    本文实例讲述了Android编程内存溢出与防范方法。分享给大家供大家参考,具体如下:  Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M。但是Android采用的是Java语言编写,所以在很大程度上,Android...

    android内存分析

    本篇将详细探讨Android内存分析,包括内存分配、垃圾回收、内存溢出以及如何避免内存泄露。 1. **Android内存机制** Android程序中的对象内存分配主要在Java堆上进行,由Java垃圾回收器(Garbage Collector, GC)...

    listview 内存溢出的简单解决方案

    然而,由于其特性,如果不合理使用,很容易引发内存溢出(Out Of Memory,OOM)问题,特别是当ListView中包含大量的图片时。本篇文章将深入探讨如何解决ListView中图片过多导致的内存溢出,并通过分析`...

    安卓开发-防止内存溢出浅析.zip

    综上所述,防止安卓应用内存溢出需要全面考虑内存管理策略,包括避免内存泄漏、控制大对象分配、优化Bitmap使用、监控内存状态以及合理设计程序结构。只有深入理解这些知识点,才能编写出高效、稳定的安卓应用。

Global site tag (gtag.js) - Google Analytics