gpt4 book ai didi

android - 为什么 EditText 在 Ice Cream Sandwich 中保留其 Activity 的上下文

转载 作者:IT老高 更新时间:2023-10-28 23:33:59 25 4
gpt4 key购买 nike

在 Ice Cream Sandwich 中,当有一个包含 EditText 的 Activity 时,即使在用户离开 Activity 之后,EditText 也会保留 Activity 的 Context。为了证明这一点,我创建了 TestLeakActivity,它分配了一个大字节数组。由于 Activity 的 Context 永远不会被垃圾回收,因此字节数组会在堆上累积,最终导致 OutOfMemoryError。您可以使用 DDMS 堆工具观察堆增长,并且可以通过查看 Eclipse MAT 中的 HPROF 文件来跟踪对 EditText 类的未完成引用。要创建内存泄漏,请进入 LaunchActivity,然后继续启动并退出 TestLeakActivity。

LaunchActivity.java
package com.example.testleakproject;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;public class LaunchActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Button button = new Button(this);        button.setText("Start TestLeakActivity");        button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(LaunchActivity.this, TestLeakActivity.class);                startActivity(intent);            }        });        ViewGroup container = ((ViewGroup) findViewById(android.R.id.content));        container.addView(button);    }}
TestLeakActivity.java
package com.example.testleakproject;import android.app.Activity;import android.os.Bundle;import android.view.ViewGroup;import android.widget.EditText;public class TestLeakActivity extends Activity {    private byte[] mSomeBytes = new byte[1048576];    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        EditText editText = new EditText(this);        editText.setHint("TestLeakActivity");        ViewGroup container = ((ViewGroup) findViewById(android.R.id.content));        container.addView(editText);    }}

最佳答案

这是一个已知错误,将在 ICS MR1 中修复。

关于android - 为什么 EditText 在 Ice Cream Sandwich 中保留其 Activity 的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8497965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com