2016-09-28 50 views
0

我正在開發一個Android應用程序,它必須模擬一種Pokédex。 現在,我想要做的只是在設備上打印所有151個神奇寶貝,這樣我就可以上下滾動它們。如何在運行期間銷燬和重新創建Android中的對象?

問題是,當我嘗試這種東西,如9或12圖像沒有問題,但是當我加載所有151圖像(所有.png),Android殺死應用程序,因爲它正在耗盡太多的系統資源。

我聽說有Java方法可以(不知道如何)在對象退出顯示時「銷燬」對象,然後在屏幕返回時重新創建對象。無論如何,如果你對如何解決我的問題有不同的建議,歡迎每一個想法!

這裏是我的MainActivity:

package com.example.thefe.newsmartkedex; 

import android.media.AudioManager; 
import android.media.SoundPool; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

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

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(new ImageAdapter(this)); 

     gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
           int position, long id) { 
       Toast.makeText(MainActivity.this, "" + position, 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 



    }; 
} 

這裏是我的ImageAdapter類我使用的GridView:

package com.example.thefe.newsmartkedex; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(200, 200)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(mThumbIds[position]); 
     return imageView; 
    } 

    // references to our images 
    private Integer[] mThumbIds = { 
      R.drawable.pkmn1, R.drawable.pkmn2, 
      R.drawable.pkmn3, R.drawable.pkmn4, 
      R.drawable.pkmn5, R.drawable.pkmn6, 
      R.drawable.pkmn7, R.drawable.pkmn8, 
      R.drawable.pkmn9, R.drawable.pkmn10, 
      R.drawable.pkmn11, R.drawable.pkmn12, 
      R.drawable.pkmn13, R.drawable.pkmn14, 
      R.drawable.pkmn15, R.drawable.pkmn16, 
      R.drawable.pkmn17, R.drawable.pkmn18, 
      R.drawable.pkmn19, R.drawable.pkmn20, 
      R.drawable.pkmn21, R.drawable.pkmn22, 
      R.drawable.pkmn23, R.drawable.pkmn24, 
      R.drawable.pkmn25, R.drawable.pkmn26, 
      R.drawable.pkmn27, R.drawable.pkmn28, 
      R.drawable.pkmn29, R.drawable.pkmn30, 
      R.drawable.pkmn31, R.drawable.pkmn32, 
      R.drawable.pkmn33, R.drawable.pkmn34, 
      R.drawable.pkmn35, R.drawable.pkmn36, 
      R.drawable.pkmn37, R.drawable.pkmn38, 
      R.drawable.pkmn39, R.drawable.pkmn40, 
      R.drawable.pkmn41, R.drawable.pkmn42, 
      R.drawable.pkmn43, R.drawable.pkmn44, 
      R.drawable.pkmn45, R.drawable.pkmn46, 
      R.drawable.pkmn47, R.drawable.pkmn48, 
      R.drawable.pkmn49, R.drawable.pkmn50, 
      R.drawable.pkmn51, R.drawable.pkmn52, 
      R.drawable.pkmn53, R.drawable.pkmn54, 
      R.drawable.pkmn55, R.drawable.pkmn56, 
      R.drawable.pkmn57, R.drawable.pkmn58, 
      R.drawable.pkmn59, R.drawable.pkmn60, 
      R.drawable.pkmn61, R.drawable.pkmn62, 
      R.drawable.pkmn63, R.drawable.pkmn64, 
      R.drawable.pkmn65, R.drawable.pkmn66, 
      R.drawable.pkmn67, R.drawable.pkmn68, 
      R.drawable.pkmn69, R.drawable.pkmn70, 
      R.drawable.pkmn71, R.drawable.pkmn72, 
      R.drawable.pkmn73, R.drawable.pkmn74, 
      R.drawable.pkmn75, R.drawable.pkmn76, 
      R.drawable.pkmn77, R.drawable.pkmn78, 
      R.drawable.pkmn79, R.drawable.pkmn80, 
      R.drawable.pkmn81, R.drawable.pkmn82, 
      R.drawable.pkmn83, R.drawable.pkmn84, 
      R.drawable.pkmn85, R.drawable.pkmn86, 
      R.drawable.pkmn87, R.drawable.pkmn88, 
      R.drawable.pkmn89, R.drawable.pkmn90, 
      R.drawable.pkmn91, R.drawable.pkmn92, 
      R.drawable.pkmn93, R.drawable.pkmn94, 
      R.drawable.pkmn95, R.drawable.pkmn96, 
      R.drawable.pkmn97, R.drawable.pkmn98, 
      R.drawable.pkmn99, R.drawable.pkmn100, 
      R.drawable.pkmn101, R.drawable.pkmn102, 
      R.drawable.pkmn103, R.drawable.pkmn104, 
      R.drawable.pkmn105, R.drawable.pkmn106, 
      R.drawable.pkmn107, R.drawable.pkmn108, 
      R.drawable.pkmn109, R.drawable.pkmn110, 
      R.drawable.pkmn111, R.drawable.pkmn112, 
      R.drawable.pkmn113, R.drawable.pkmn114, 
      R.drawable.pkmn115, R.drawable.pkmn116, 
      R.drawable.pkmn117, R.drawable.pkmn118, 
      R.drawable.pkmn119, R.drawable.pkmn120, 
      R.drawable.pkmn121, R.drawable.pkmn122, 
      R.drawable.pkmn123, R.drawable.pkmn124, 
      R.drawable.pkmn125, R.drawable.pkmn126, 
      R.drawable.pkmn127, R.drawable.pkmn128, 
      R.drawable.pkmn129, R.drawable.pkmn130, 
      R.drawable.pkmn131, R.drawable.pkmn132, 
      R.drawable.pkmn133, R.drawable.pkmn134, 
      R.drawable.pkmn135, R.drawable.pkmn136, 
      R.drawable.pkmn137, R.drawable.pkmn138, 
      R.drawable.pkmn139, R.drawable.pkmn140, 
      R.drawable.pkmn141, R.drawable.pkmn142, 
      R.drawable.pkmn143, R.drawable.pkmn144, 
      R.drawable.pkmn145, R.drawable.pkmn146, 
      R.drawable.pkmn147, R.drawable.pkmn148, 
      R.drawable.pkmn149, R.drawable.pkmn150, 
      R.drawable.pkmn151 
    }; 
} 

最後,這是XML文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.thefe.newsmartkedex.MainActivity"> 

    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/gridview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:columnWidth="90dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="10dp" 
     android:horizontalSpacing="10dp" 
     android:stretchMode="columnWidth" 
     android:gravity="center" 
     /> 
</RelativeLayout> 

感謝幫幫我!

+0

您必須將圖像加載到高速緩衝存儲器中。 –

+0

我認爲最好把'imageView.setImageResource(mThumbIds [position]);'放在'if(convertView == null)' – nrofis

回答

0

首先,我沒有看到你的代碼中的任何違規所以讓我們關注的圖片。

的問題是,當我試着使用諸如9或12張這件事不存在任何問題,但是當我加載所有151幅圖像(全png格式),機器人殺死的應用程序,因爲它的排放太多系統資源。

什麼意思是「加載所有151張圖片」?同一時間在同一個屏幕上?或者你只是在視圖中看到相當少量的數據(如9,12,16等),而其他數據則不在屏幕上?

我聽說有Java方法可以(不知道如何)在對象退出顯示時「銷燬」對象,然後在屏幕返回時重新創建對象。無論如何,如果你對如何解決我的問題有不同的建議,歡迎每一個想法!

你不能簡單地破壞一個對象,當你的對象無效或未被使用時,Jvm會爲你處理這個對象。至於這個問題,你在'getView'中實現的對象的重新創建似乎沒有什麼壞處。

我的問題是:你在一個整個屏幕上顯示了多少圖像?他們有多大?

如果你可以在這裏提供你的演示,它將是最好的工作。

+0

1.我在視圖中看到其中很少一部分人,其他人都不在屏幕上,是的! 2.Sry ...我如何在這裏提供演示? –

+0

你能告訴我你照片的大小嗎?我可以做一些實驗。 – Bennyhuo

+0

當然,它們都是png 32位的475x475像素 –

0

顯示有限的圖像,可以適合您的屏幕和滾動Gridview時加載其他圖像。

這種方式系統不會一次做很多工作。你的應用程序也變得更快。

您可以參考以下鏈接:

所有的

i want grid view with loading by scroll i have image fetch from sever but i want only 10 images view other can load when scrolling grid view

+0

好吧,Ithink這可以解決我的問題......我只需要了解實施它(我不是那麼專業)。 –

+0

AndroidStudio在類文件「EndlessScrollListener」的第35行的LoadGigsTask中給了我一個「無法解析符號」...我不知道該如何解決這個問題,或者我必須在哪裏放置「setOnScrollListener() 「...請問你能幫幫我嗎? –

+0

https://gist.github.com/codeswimmer/869685。看一下這個。它可能會幫助你。 –