【问题标题】:How to pass a ArrayList<Bitmap> between activities如何在活动之间传递 ArrayList<Bitmap>
【发布时间】:2012-07-08 23:39:04
【问题描述】:

我有一个ArrayList&lt;Bitmap&gt;,我使用getBitmapFromAsset() 方法填充了它,并希望使用Bundle 通过意图传递它。但是,它允许我使用 ArrayList&lt;String&gt; 传递其他 ArrayLists:

Intent intent = new Intent(myClass.this, Rclass.class);  
Bundle bundle = new Bundle();    
bundle.putStringArrayList("names", (ArrayList<String>) names);  
intent.putExtras(bundle);
startActivity(intent);

但我不知道如何传递 Bitmap 类型的 ArrayList,因为我在 Bundle 中看不到该选项。关于如何执行此操作的任何想法?

【问题讨论】:

    标签: android arraylist


    【解决方案1】:

    将位图本身从一个活动传递到另一个活动是非常低效的内存。如果你的位图是小尺寸的图标可能没问题,但如果它们是大位图,你可能会遇到内存不足的异常。

    您是否考虑过对此进行一些重构,例如使用具有位图 ID(或资产名称)的 HashMap 的单例到位图本身的 WeakReference。这个单例,我们称之为 BitmapHelper,如果它尚未加载或已被垃圾收集器释放,它将自动从资产中重新加载位图。

    拥有这个 BitmapHelper 后,只需将字符串数组中的位图 ID/资产名称传递给另一个活动。在其他活动中,您可以从 BitmapHelper 访问位图。

    【讨论】:

    • 谢谢,我选择创建一个字符串数组来传递位图的名称,然后在子活动中转换它们。在活动之间传递字符串数组的内存效率如何?
    • 是的,StringArray 名称序列化使用的内存比整个 Bitmap 本身要少得多。
    【解决方案2】:

    Bitmap 默认实现Parcelable

    使用Bundle.putParcelableArrayList(String key, ArrayList<? extends Parcelable> value):

    ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
    bitmaps.add(bitmap);
    bundle.putParcelableArrayList("names", bitmaps);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2023-03-23
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多