【发布时间】:2014-08-27 06:21:36
【问题描述】:
我在开发者博客上阅读了有关上下文内存泄漏的信息。
http://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html
但我不确定我是否理解它。
方法getAppVersion会不会因为上下文引用而导致内存泄漏?
public class A
{
public static int getAppVersion(Context context) {
try {
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (NameNotFoundException e) {
// should never happen
throw new RuntimeException("Could not get package name: " + e);
}
}
}
public class B extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
int version = A.getAppVersion(this);
}
}
【问题讨论】:
-
如果您将活动上下文保存在静态字段中,则不会发生内存泄漏。在你的情况下,你不这样做。
-
并且
getAppVersion仅在方法执行时保存对context的引用。之后它被移除并且不再“活着”。 -
只是避免将任何绑定到上下文本身的上下文的 Android 组件。您必须了解 Android 中的几乎所有内容都是托管的,因此不要对您不能 100% 确定的任何内容做出任何假设。经验法则基本上是您留在 Android 的生命周期中,并将您自己变量的范围与它们匹配。
标签: java android memory-leaks