做网站学什么语言,所有网站大全,秦皇岛网站制作源码,江宁网站建设多少钱转自#xff1a;http://www.linuxidc.com/Linux/2011-10/44785.htm 因为Android使用Java作为开发语言#xff0c;很多人在使用会不注意内存的问题。 于是有时遇到程序运行时不断消耗内存#xff0c;最终导致OutOfMemery#xff0c;程序异常退出#xff0c;这就是内存泄露导…转自http://www.linuxidc.com/Linux/2011-10/44785.htm 因为Android使用Java作为开发语言很多人在使用会不注意内存的问题。 于是有时遇到程序运行时不断消耗内存最终导致OutOfMemery程序异常退出这就是内存泄露导致的。 我们现在就来总结一下可能导致内存泄露的情况 查询数据库而没有关闭Cursor 在Android中Cursor是很常用的一个对象但在写代码是经常会有人忘记调用close, 或者因为代码逻辑问题状况导致close未被调用。 通常在Activity中我们可以调用startManagingCursor或直接使用managedQuery让Activity自动管理Cursor对象。但需要注意的是当Activity介绍后Cursor将不再可用若操作Cursor的代码和UI不同步如后台线程那没需要先判断Activity是否已经结束或者在调用OnDestroy前先等待后台线程结束。除此之外以下也是比较常见的Cursor不会被关闭的情况 try { Cursor c queryCursor(); int a c.getInt(1); ...... c.close(); } catch (Exception e) { } 虽然表面看起来Cursor.close()已经被调用但若出现异常将会跳过close()从而导致内存泄露。 所以我们的代码应该以如下的方式编写 Cursor c queryCursor(); try { int a c.getInt(1); ...... } catch (Exception e) { } finally { c.close(); //在finally中调用close(), 保证其一定会被调用 } 调用registerReceiver后未调用unregisterReceiver(). 在调用registerReceiver后若未调用unregisterReceiver其所占的内存是相当大的。而我们经常可以看到类似于如下的代码 registerReceiver(new BroadcastReceiver() { ... }, filter); ... 这是个很严重的错误因为它会导致BroadcastReceiver不会被unregister而导致内存泄露。 未关闭InputStream/OutputStream 在使用文件或者访问网络资源时使用了InputStream/OutputStream也会导致内存泄露 Bitmap使用后未调用recycle() 根据SDK的描述调用recycle并不是必须的。但在实际使用时Bitmap占用的内存是很大的所以当我们不再使用时尽量调用recycle()以释放资源。 Context泄露 这是一个很隐晦的内存泄露的情况。先让我们看一下以下代码 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); } 在这段代码中我们使用了一个static的Drawable对象。这通常发生在我们需要经常调用一个Drawable而其加载又比较耗时不希望每次加载Activity都去创建这个Drawable的情况。此时使用static无疑是最快的代码编写方式但是其也非常的糟糕。当一个Drawable被附加到View时这个View会被设置为这个Drawable的callback (通过调用Drawable.setCallback()实现)。这就意味着这个Drawable拥有一个TextView的引用而TextView又拥有一个Activity的引用。这就会导致Activity在销毁后内存不会被释放。 转载于:https://www.cnblogs.com/wliangde/p/3712619.html