当我使用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。所以,我想问题是图像资源还没有被回收。任何人都可以告诉我更多关于首次启动的活动的细节。为什么不释放这些资源?
答案 0 :(得分:0)
你可以做些什么来确保释放imge图像以进行垃圾收集在onStop中将图像设置为null以确保没有任何引用它。
@Override
public void onStop() {
super.onStop();
mImageView.setImageDrawable(null);
}
然后,您可以使用AndroidDeviceMonitor强制进行垃圾收集,以确保它从堆中释放。