0

我正在創建一個Android應用程序(Android Studio),該應用程序顯示一個垂直滾動視圖,其中包含許多文字瀏覽和圖像瀏覽(在一頁上大約有40個)。請參閱下面的.xml文件。此代碼僅顯示其中3種重複模式,但我的代碼中包含更多內容 - 刪除了這些內容以減少此篇文章的篇幅。Android垂直滾動查看內存不足錯誤

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:tools="http://schemas.android.com/tools" 
 
    android:orientation="vertical" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:background="@drawable/smiles_background" 
 
    tools:context="com.mobilewebanalytiq.forkshappyhour.monday"> 
 

 
    <TextView 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:textAppearance="?android:attr/textAppearanceSmall" 
 
     android:text="Search by Day" 
 
     android:id="@+id/tvnumber" 
 
     android:layout_gravity="right" 
 
     android:layout_marginTop="5dp" 
 
     android:layout_marginRight="10dp" 
 
     android:textColor="#ff000000" /> 
 

 

 
    <TextView 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:textAppearance="?android:attr/textAppearanceSmall" 
 
     android:text="Monday" 
 
     android:id="@+id/tvday" 
 
     android:textSize="30dp" 
 
     android:textColor="#ff000000" 
 
     android:layout_marginLeft="10dp" /> 
 

 
    <ScrollView 
 
     android:layout_width="match_parent" 
 
     android:layout_height="match_parent" 
 
     android:id="@+id/scrollView3" > 
 

 
     <LinearLayout 
 
      android:orientation="vertical" 
 
      android:layout_width="fill_parent" 
 
      android:layout_height="fill_parent"> 
 

 
      <TextView 
 
       android:layout_width="wrap_content" 
 
       android:layout_height="wrap_content" 
 
       android:textAppearance="?android:attr/textAppearanceLarge" 
 
       android:text="Large Text" 
 
       android:id="@+id/textView401" 
 
       android:layout_marginTop="10dp" 
 
       android:layout_gravity="center_horizontal" 
 
       android:textSize="30dp" /> 
 

 
      <ImageView 
 
       android:layout_width="300dp" 
 
       android:layout_height="300dp" 
 
       android:id="@+id/imageView401" 
 
       android:layout_gravity="center_horizontal" 
 
       android:src="@drawable/sunday1" /> 
 

 

 
      <TextView 
 
       android:layout_width="wrap_content" 
 
       android:layout_height="wrap_content" 
 
       android:textAppearance="?android:attr/textAppearanceLarge" 
 
       android:text="Large Text" 
 
       android:id="@+id/textView402" 
 
       android:layout_marginTop="10dp" 
 
       android:layout_gravity="center_horizontal" 
 
       android:textSize="30dp" /> 
 

 
      <ImageView 
 
       android:layout_width="300dp" 
 
       android:layout_height="300dp" 
 
       android:id="@+id/imageView402" 
 
       android:layout_gravity="center_horizontal" 
 
       android:src="@drawable/sunday2" /> 
 

 
      <TextView 
 
       android:layout_width="wrap_content" 
 
       android:layout_height="wrap_content" 
 
       android:textAppearance="?android:attr/textAppearanceLarge" 
 
       android:text="Large Text" 
 
       android:id="@+id/textView403" 
 
       android:layout_marginTop="10dp" 
 
       android:layout_gravity="center_horizontal" 
 
       android:textSize="30dp" /> 
 

 
      <ImageView 
 
       android:layout_width="300dp" 
 
       android:layout_height="300dp" 
 
       android:id="@+id/imageView403" 
 
       android:layout_gravity="center_horizontal" 
 
       android:src="@drawable/sunday3" /> 
 
      
 
      //This will continue on for many lines 
 
      
 
     </LinearLayout> 
 
    </ScrollView> 
 

 
</LinearLayout>

正如預期的那樣,當我打開這個網頁應用程序會崩潰。重新設計這個.xml的最佳方式是什麼,以便應用程序不再崩潰?我應該使用不同的佈局還是有辦法優化此代碼?正如你所看到的,我從@drawable文件夾中拉出來,但也許使用另一個位置會有所幫助。 .java文件在下面供參考。感謝您的詳細幫助!

package com.mobilewebanalytiq.forkshappyhour; 
 

 
import android.app.Activity; 
 
import android.os.Bundle; 
 
import android.view.animation.Animation; 
 
import android.view.animation.AnimationUtils; 
 
import android.widget.ViewFlipper; 
 
import android.view.GestureDetector; 
 
import android.view.GestureDetector.SimpleOnGestureListener; 
 
import android.view.MotionEvent; 
 

 

 
/** 
 
* Created by Matt on 2/8/2015. 
 
*/ 
 
public class monday extends Activity { 
 

 

 
    @Override 
 
    public void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.monday); 
 

 

 
    }}

+0

你爲什麼不使用列表視圖,而不是滾動型的?你的'OutOfMemory'錯誤是因爲你的圖像瀏覽器使用的位圖。 – iRuth 2015-02-12 06:08:55

回答

0

可用,你將不能夠有一個直接引用在每個圖像的內存有限,否則像你說的,你會耗盡內存。只要存在對您的BitMap對象的引用,這些圖像就會佔用內存中的空間。爲了釋放這個內存,你需要解引用這些BitMaps和/或清除ArrayList,這將允許垃圾收集器釋放未使用的內存。理想情況下,您只需要參考您可以看到的圖像或您將在下面看到的圖像。

您可以查看每個頁面視圖的8個圖像,或者查看周圍頁面視圖的圖像。如果您顯示的圖像比它們佔用的尺寸大得多,那麼您可能需要即時調整這些圖像的大小,並且只將它們存儲爲它們出現的大小,這也應該有助於減少圖像的內存佔用。

Android的開發者寫了一系列的教程就剛纔這個話題:http://developer.android.com/training/displaying-bitmaps/index.html