我使用以下帖子在测试应用程序中生成内存泄漏
http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html
我正在使用android studio内存分析器和分配跟踪器来跟踪对象分配。我能够在多次旋转屏幕时看到创建的活动实例。但是当我点击android studio上的“Initiate GC”时,所有这些实例都被垃圾收集,尽管它们拥有对drawable对象的静态引用。我期待保留这些活动对象,并导致“内存不足”异常。以下是我使用的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("Hello View");
if(sBackground == null) {
sBackground = ContextCompat.getDrawable(this,R.drawable.back1mb);
}
mTextView = (TextView) findViewById(R.id.txtView);
textView.setBackgroundDrawable(sBackground);
setContentView(textView);
}
答案 0 :(得分:1)
问题是,您引用的博客文章非常陈旧,Android SDK自编写以来发生了很大变化。在早期,正如教程所说:
但是,对于更新版本的Android SDK,情况并非如此。
早期版本TLS
的代码是(请参阅link):
Drawable.setCallback
但它现在使用WeakReference
(请参阅link),因此不再泄密:
public final void setCallback(Callback cb) {
mCallback = cb;
}
您可以针对旧版本的Android进行构建,以查看博客中的泄露行为,或使用其他方法创建泄漏。