0

リストの検索テキストを実装し、

すべてのリスト行アイテムには、サーバーからダウンロードしたテキストと画像が含まれています。

私は常に2つのリストを保持しています.1つはテキストと画像の元のリストであり、もう1つはテキストと画像のソートされたリストです...

リストに 4 つのアイテムしか含まれていない場合、アプリは正常に動作しますが、リストに 20 のアイテムが含まれ、すべての画像が 1MB で、2 つのリスト listImagesOriginal 、image_array をアダプター内に保持する必要がある場合 (= 40MB)、OutOfMemory Exception を受け取ります。

OutOfMemory 例外を受信しないというメモリ消費を減らすにはどうすればよいですか?

どうもありがとう

どうすれば減らすことができますか

private MyCustomAdapter adapter;

private List<String> text = new ArrayList<String>();
private List<Bitmap> listImages;



private List<String> textOriginal = new ArrayList<String>();
private List<Bitmap> listImagesOriginal =new ArrayList<Bitmap>();

adapter =new MyCustomAdapter(text,listImages);
         ListView.setAdapter(adapter);



searchText= (EditText) findViewById(R.id.profile_page_search);

         searchText.addTextChangedListener(new TextWatcher()
         {
             public void afterTextChanged(Editable s)
             {
                   // Abstract Method of TextWatcher Interface.
                 textlength = searchText.getText().length();
                 adapter.deleteAllForSearch();
                 for (int i = 0; i < textOriginal.size(); i++)
                 {

                         if(textOriginal.get(i).contains(
                                 searchText.getText().toString().trim()))
                         {
                             adapter.addObjectForSearch(textOriginal.get(i), listImagesOriginal.get(i));
                         }

                 }
             }
             public void beforeTextChanged(CharSequence s,
                     int start, int count, int after)
             {
                 // Abstract Method of TextWatcher Interface.
             }
             public void onTextChanged(CharSequence s,
                     int start, int before, int count)
             {

              }
          });




class MyCustomAdapter extends BaseAdapter{
          public   List<String> text_array = new ArrayList<String>();
          public   List<Bitmap> image_array = new ArrayList<Bitmap>();


          public int getCount(){
               return text_array.size();
          }

          MyCustomAdapter(List<String> text, List<Bitmap>)
          {

           text_array = text;
           image_array = image;

          }

          public long getItemId(int position){
               return position;
          }
          public String getItem(int position){
               return null;
          }
          public View getView(final int position, View convertView, ViewGroup parent) {
               //my implementation
          }

public void addObjectForSearch(String text, Bitmap bitmap) {
                text_array.add(text);
                image_array.add(bitmap);


                notifyDataSetChanged();

          }
4

2 に答える 2

0

40MB は Android には多すぎます。すべての携帯電話にはアプリごとのメモリ制限があり、40MB はほとんどのハイエンド携帯電話の使用量よりも多くなっています。イメージのディスクおよび/またはメモリ キャッシュを実装する必要があります。

于 2013-04-08T14:42:00.267 に答える
0

これらすべてのビットマップを同時にメモリにロードしたくないため、キャッシュを使用するか、永続メモリ (DB、ファイルシステムなど) に保存する必要があります。同時。多くの古いデバイスの VM ヒープ サイズは約16-24MBであり、メモリ使用量を妥当な量に抑える必要があります。

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

于 2013-04-08T14:42:07.410 に答える