我阅读了许多关于如何避免 Android 中的内存泄漏的文章,但我仍然不太确定我是否正确。
- 我的应用程序由单个
Activity
. - 我在那个 Activity 中没有任何私有或静态成员,所有代码都是从
onCreate()
. - 有一些自包含的静态类,它们的静态实例有时包含对 a
Context
或View
s 的引用。在我的onDestroy()
方法中,我将所有这些实例都设置为空。 - 我回收了我所有的
Bitmap
s。
Q1:够了吗?
让我感到困惑的是您可以在网上找到的经典示例(http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/):
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
setContentView(label);
}
我认为,一旦onCreate
完成,label
就会超出范围并被 GCed。
Q2:这怎么会造成内存泄漏?
我的活动基本上是这样的:
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Statics */
AssetUtils.initIndex(this);
BitmapLoader.startInstance(this);
/* frame */
ViewGroup frame = (ViewGroup) getLayoutInflater().inflate(R.layout.frame, null);
this.setContentView(frame);
/* create controller */
Controller controller = new Controller(frame, getLayoutInflater());
/* START */
controller.start();
}
@Override
public void onDestroy() {
super.onStop();
/* Statics */
AssetUtils.destroyInstance();
BitmapLoader.destroyInstance();
}
在里面Controller
,我偶尔会检索一个Context
usingView#getContext()
以将其传递给手动创建View
的 s 等。它永远不会静态存储在某个地方,只会存储在所有返回到Controller
.
Q3:有什么我忽略的吗?