2012-04-12 62 views
0

我使用zxing编码qr代码并将其存储为位图,然后将其显示在ImageView中。由于图像生成时间很重要,我打算将它移动到一个单独的线程(AsyncTaskLoader将罚款我认为)。高速缓存生成的QR码

问题是 - 它是一个图像,我知道为避免内存泄漏,不应该在Activity中存储强引用。

那么你会怎么做呢? 如何缓存图像以保存配置更改(电话轮换),并且通常避免生成它onCreate()

请指点我正确的方向。

编辑: 也许,如果我用AsyncTaskLoader反正,我应该让他做其工作,并保持位图呢?我的意思是,它应该返回它加载的数据(在这种情况下生成)并在需要时返回,不是吗?

+0

您需要保存的图像说SD卡或内部storage.And使用保存URI或位图,如果已经存在,否则从URL的第一时间内获取并存储 – 2012-04-12 17:27:18

回答

0

嗯,这一个非常普遍的问题:

Saving Android Activity state using Save Instance State Activity restart on rotation Android How to pass an object from one activity to another on Android

你可能必须使用Parceable对象。 http://chmcguir.wordpress.com/2012/02/12/parcelable-how-to-pass-data-between-android-activities/

编辑:

这是关于这个问题的正式文章。它使用onRetainNonConfigurationChange()来传递位图

Photostream实例从drawables中提取位图并仅传递位图,而不是drawables。最后,请记住,onRetainNonConfigurationChange()只应用于保留加载昂贵的数据。否则,请保持简单,让Android尽一切努力。

http://developer.android.com/resources/articles/faster-screen-orientation-change.html

+0

嗯,我知道如何保存应用程序状态并使用Parcelables,实际上我在我的应用程序中使用了它。但据我所知,它不是像Bitmaps这样的东西的首选解决方案。或者我错了?位图实现了Parcelable,但它会如此简单吗?... – 2012-04-12 17:35:47

+0

@MichałK我更新了我的答案。 – Aron 2012-04-12 20:00:32

+0

关于内存泄漏等,我认为你指的是同一个问题,很多用户都认为垃圾收集器要慢,因此你必须通过回收位图来帮助它。 http://stackoverflow.com/questions/1949066/java-lang-outofmemoryerror-bitmap-size-exceeds-vm-budget-android/10098486#10098486 – Aron 2012-04-12 20:06:29