如何释放1个活动中使用的资源? 所以我为每个布局都有3个布局和活动,但问题是当我在这些活动之间切换时,我的应用程序崩溃了,我得到了这个:
自从我添加了添加到我的应用程序后,我就开始收到此错误。 我的整个logcat http://i.imgur.com/t5G94dC.png
XML布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#000000" >
<ImageButton
android:id="@+id/dugme2"
android:layout_width="150dp"
android:layout_height="90dp"
android:layout_alignBottom="@+id/dugme1"
android:layout_alignParentRight="true"
android:background="#0000"
android:onClick="onClick"
android:scaleType="fitXY"
android:src="@drawable/dragunov" />
<ImageButton
android:id="@+id/dugme5"
android:layout_width="150dp"
android:layout_height="90dp"
android:layout_alignParentLeft="true"
android:layout_alignTop="@+id/dugme6"
android:background="#0000"
android:onClick="onClick"
android:scaleType="fitXY"
android:src="@drawable/scout" />
<SeekBar
android:id="@+id/seekSnipers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:progressDrawable="@drawable/red_scrubber_progress"
android:thumb="@drawable/red_scrubber_control" />
<com.google.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
ads:adSize="BANNER"
ads:adUnitId="ID"
ads:loadAdOnCreate="true" >
</com.google.ads.AdView>
</RelativeLayout>
除了不同的资源和ID之外,其他布局也几乎相同。 每个布局中的广告代码都相同。
答案 0 :(得分:1)
您可以使用以下代码释放资源。这应该在u =你的活动的onDestroy()中调用。
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
view.setBackgroundResource(0);
}
}
为了破坏活动,你应该在调用下一个活动后调用 finish()。
答案 1 :(得分:0)
您应该使用OnStop()回调来释放导致内存泄漏的资源。您还应该使用onStop()执行相对CPU密集型的关闭操作。