我有一个应用程序可以动态生成6到100个小位图,供用户在给定的会话中在屏幕上移动。我目前在onCreate
生成它们并将它们存储到SD卡中,以便在更改方向后我可以将它们从外部存储中取出并再次显示它们。但是,这需要时间(加载),我希望在生命周期更改之间保留位图引用,以便更快地访问。
我的问题是,是否有更好的地方存储我生成的位图?我正在考虑在我的基本活动中创建一个静态存储库,当应用程序从内存中完全删除时,只需要重新加载(关闭,其他应用程序需要资源,30分钟重启等)。
理想情况下,我希望用户能够退回到标题屏幕,单击“恢复”按钮,然后在onCreate
中我只能访问那些驻留位图引用而不必加载他们再次从存储。出于这个原因,我认为Activity.onRetainNonConfigurationInstance
不是我需要的。
或者,是否有更好的方法来处理多个生成的位图,而不是我正在做的或我描述的计划?
答案 0 :(得分:5)
绝对可以查看Romain Guy的blog post关于在方向更改时保留生成的位图的问题。这听起来像一个几乎相同的情况。它的要点是,您可以使用onRetainNonConfigurationInstance
/ getLastNonConfigurationInstance
在与方向相关的活动销毁中传递/接收任意对象。但是,这不会帮助您退出然后重新启动活动。
您还可以将Bitmaps填充到类似静态缓存的对象(可能是Application类上的SoftReference HashMap),但要小心不要存储Drawables或Views,这会导致memory leaks因为他们对其含有活动的引用。这将持续整个应用程序的生命周期,但如果可能的话,我会避免这种情况,因为任何全局状态都可能导致丑陋的问题,并且在事物引用Activity实例的情况下很难找到内存泄漏。