2016-09-28 57 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。看一下这个。它可能会帮助你。 –