Android第一个Activity没有真正被破坏

时间:2015-07-10 05:29:39

标签: android android-activity

当我使用AndroidDeviceMonitor调试我的应用程序时,我发现我的应用程序的堆很奇怪。启动应用程序(SplashActivity - > MainActivity)后,“1字节数组”已分配42MB。我确信SplashActivity已被破坏,我正在使用LeakCanary来发现是否有任何内存泄漏。但我没有找到任何东西。

然后我尝试在setContentView方法中创建一个新的SplashActiviy,只需onCreate(),而不需要任何其他代码。

布局xml是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center">
<ImageView
    android:id="@+id/splash"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY"
    android:src="@drawable/splash2"/>
<ImageView
    android:id="@+id/logo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:scaleType="fitCenter"
    android:src="@drawable/splashlogo"/>
</RelativeLayout>

我再次调试,“1字节数组”仍为42MB。然后我尝试从布局中删除src标记。 “1字节数组”减少到35MB。所以,我想问题是图像资源还没有被回收。任何人都可以告诉我更多关于首次启动的活动的细节。为什么不释放这些资源?

1 个答案:

答案 0 :(得分:0)

你可以做些什么来确保释放imge图像以进行垃圾收集在onStop中将图像设置为null以确保没有任何引用它。

@Override
public void onStop() {
    super.onStop();

    mImageView.setImageDrawable(null);
}

然后,您可以使用AndroidDeviceMonitor强制进行垃圾收集,以确保它从堆中释放。