Android Activity在非常简单的设置中泄漏

时间:2016-07-19 22:47:28

标签: java android android-activity memory-leaks

我有一个包含2个非常简单的Activity对象的系统 - MainActivity启动TestActivity,它上面有一个非常大的图像。在TestActivity中,我按下后退按钮返回MainActivity,但是我的记忆(大约45-50米)没有得到GCed。有什么想法吗?

Leak

enter image description here

MainActivity.java

            public class MainActivity extends Activity {

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                Intent intent = new Intent(this, TestActivity.class);
                startActivity(intent);
            }
        }

TestActivity.java

    public class TestActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_test);
        }


        @Override
        public void onBackPressed() {
            super.onBackPressed();
        }


    }

MainActivity布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.leaked.leaked.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
    </RelativeLayout>

TestActivity布局

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/earth_poster_large"/>
    </FrameLayout>

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.leaked.leaked">

    <application>
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        </activity>
        <activity android:name=".TestActivity">
        </activity>
    </application>

</manifest>

3 个答案:

答案 0 :(得分:0)

当您不再需要时,应释放ImageView占用的内存。 在您的情况下,您可以使用此 -

在TestActivity的onDestroy()中执行此操作
yourImageView.setImageDrawable(null);

答案 1 :(得分:0)

您可以通过手动调用destroy activity finish()来做一件事。

但仍然无法保证内存不会被占用。

答案 2 :(得分:0)

我想真的没有泄漏。如果我试图进行一些巨大的测试活动,它将成功显示&#34;泄露的活动&#34;。我认为Android运行时由于性能原因没有立即执行这些活动,即用户将来可能会再次回到这些活动。只有在足够长的时间过去之后才能接受那些流浪的活动。