Android:尝试生成内存泄漏

时间:2015-08-08 20:11:40

标签: android android-studio memory-leaks garbage-collection

我使用以下帖子在测试应用程序中生成内存泄漏

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);

    }

1 个答案:

答案 0 :(得分:1)

问题是,您引用的博客文章非常陈旧,Android SDK自编写以来发生了很大变化。在早期,正如教程所说:

  

Drawable附加到视图时,视图在drawable上设置为callback

但是,对于更新版本的Android SDK,情况并非如此。

早期版本TLS的代码是(请参阅link):

Drawable.setCallback

但它现在使用WeakReference(请参阅link),因此不再泄密:

public final void setCallback(Callback cb) {
    mCallback = cb;
}

您可以针对旧版本的Android进行构建,以查看博客中的泄露行为,或使用其他方法创建泄漏。