2017-07-28 31 views
0

我面對的是兒童ABCD應用程序中的太多崩潰,也是因爲由於出現的充氣異常而導致的內存不足錯誤如何刪除充氣異常由於內存不足導致的錯誤

應用正在採取這麼大的空間,當它在前臺運行,導致其崩潰。

此問題僅出現在我們不同活動之間如此迅速,堆積區域得到填補如此之快和應用交換開始給充氣異常並最終崩潰之前釋放上的活動空間摧毀。 (活動之間的快速切換是爲了檢查應用性能)。

主要的原因可能是大圖像或應用程序採取更多的空間在後臺緩存存儲。

大尺寸圖像不能成爲問題,因爲我們已經證實所有圖片應該是大小適中的。我們用代碼完成的另一件事是通過調用finish()方法完成每個意圖的每個活動。這裏使用finish()方法,以便活動可以釋放當前空間中的所有位圖(關閉活動時)。

super.onCreate(savedInstanceState); 
    setContentView(R.layout.ringa_ringa); 

    pause = (ImageView) findViewById(R.id.pause); 
    txt = (TextView) findViewById(R.id.txt); 
    pause.setVisibility(View.VISIBLE); 
    txt.setTextColor(Color.parseColor("#ffffff")); 
    list = new ArrayList<>(); 
    mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "Kids_Rhymes"); 

    ringa_thread_running = false; 



    pause.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (counter == 0) { 
       mediaPlayer.stop(); 
       ringa_thread_running = false; 
       position = 0; 
       if (lyrics_ring.isAlive()) { 
        lyrics_ring.interrupt(); 
       } 
       pause.setImageResource(R.drawable.play); 
       counter = 1; 
      } else if (counter == 1) { 
       pause.setImageResource(R.drawable.pause); 
       counter = 0; 
       onResume(); 
      } 
     } 
    }); 

    String[] words = getResources().getString(R.string.ringa).split("\\$"); 
    for (String w : words) { 
     System.out.println("=======String====" + w); 
     list.add(w); 

    } 

試圖找出準確的解決方案,但沒有得到合適的。

+0

參考https://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object – sasikumar

+0

在這裏發佈您的代碼 – Anil

+0

嗨Anil,我現在已經放了代碼,請檢查。 –

回答

0

把下面的代碼在你的清單

android:largeHeap="true" 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:largeHeap="true" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
0

如何去除膨脹例外ocurring由於內存不足的錯誤

使用較少的內存整體,尤其要避免重複的大量分配。您可以使用Android Studio來提供幫助,例如通過生成堆轉儲來查看您在內存中的各種對象。

大尺寸圖像可能不是問題,因爲我們已經證實所有圖片應該是大小適中的

記住,「適度規模」需要使用的堆空間方面來衡量,這比使用的磁盤空間大得多,因爲大多數圖像都是以壓縮格式存儲的。另外,請記住,可繪製資源將根據設備的屏幕密度以及您在資源目錄中爲資源聲明的屏幕密度進行縮放。

這裏使用finish()方法,以便活動可以釋放當前空間中的所有位圖(關閉活動時)。

首先,您的活動被破壞的時間與下一個活動開始的時間不完全同步。這裏的交互比這更復雜。

其次,對於您可能再次使用的位圖,釋放它們並在稍後嘗試重新分配它們是得到OutOfMemoryErrors的好方法。

總的來說,有一些書籍和課程涵蓋了Android內存管理。你可能會考慮從這些資源中學習。