如何销毁/释放1活动/布局中使用的资源?

时间:2014-01-24 09:17:18

标签: android resources release destroy

如何释放1个活动中使用的资源? 所以我为每个布局都有3个布局和活动,但问题是当我在这些活动之间切换时,我的应用程序崩溃了,我得到了这个: logcat

自从我添加了添加到我的应用程序后,我就开始收到此错误。 我的整个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之外,其他布局也几乎相同。 每个布局中的广告代码都相同。

2 个答案:

答案 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密集型的关闭操作。