Android在屏幕旋转期间保存活动数据

时间:2012-07-09 21:11:47

标签: android screen-rotation

我谷歌很多,但现在我决定问......

我的活动只做一件简单的事 - 它使用AsyncTask从Internet下载图片。

但是有很多问题,我不确定,如何解决..

1。]用户在 AsyncTask下载图片后旋转屏幕 ..如何处理此屏幕旋转?在活动重新创建后临时保存图片的位置?

想锁定屏幕方向(android:screenOrientation =“landscape”)或自己处理(android:configChanges =“orientation”)..

我只想在某处保存图片..

我知道可以使用 onRetainNonConfigurationInstance() getLastNonConfigurationInstance()来完成,但现在不推荐使用 。 Bundle不适合图像,因为它是为String(Serializable)数据而制作的。我可以将图片保存到数据库或文件某处,但这是不必要的。我在某个地方读过,它可以由Loader完成,但我不知道怎么办?有可能吗?

2.。用户在期间旋转屏幕 AsyncTask正在下载图片。

我希望AsyncTask继续下载。下载完成后,AsyncTask应将图像保存到onPostExecute方法中的新(重新创建)活动。

我认为如果AsyncTask是活动的内部类,它可以工作..?但如果我不希望它成为内部类,我必须保存对活动的引用,例如在变量中。但是如果我将对Activity的引用作为AsyncTask的构造函数的参数发送,并且在屏幕旋转后重新创建Activity,则AsyncTask中的变量确实引用原始活动,因此新的变量不知道下载的图片而且必须再次开始下载..

或者AsyncTask是下载图片的不好选择吗?我应该用别的吗?服务?

那么..如何解决这些问题?我相信很多应用程序开发人员也必须解决这个问题。但对我来说这都是希腊语:(

2 个答案:

答案 0 :(得分:1)

当AsyncTask完成下载图像后,将其保存到应用程序的缓存目录中。在Activity类的属性中保留已保存图像的路径。然后,您可以覆盖活动的onSaveInstanceState方法,以便在方向更改期间将缓存的图像路径传递给自身。在onCreate方法中,检查savedInstanceState包中是否有已保存的图片路径。如果该路径存在,请勿尝试重新下载该映像。相反,只需从磁盘加载图像。

答案 1 :(得分:0)

我已经回答过某个地方。我找到了一个非常好的例子:阅读this。这个旧API的例子。

对于新的,您可以使用片段的setRetainInstance方法(如果您使用片段)。