2012-07-09 202 views
2

中保存活动数据我google了很多,但现在我决定问..Android的屏幕旋转

我的活动只做一件简单的事情 - 它下载使用的AsyncTask来自互联网的图片。

但是有一个很大的问题,那我不知道,该如何解决..

1]用户的AsyncTask已经下载的图片。我应该如何处理这种屏幕旋转后旋转屏幕?活动重新创建后临时保存图片的位置在哪里?

希望锁定屏幕方向(机器人:screenOrientation =“风景”)或自己处理它(机器人:configChanges =“方向”)..

我只是想救图片的地方..

我知道它可以通过使用onRetainNonConfigurationInstance()getLastNonConfigurationInstance()来完成,但两者现在已被弃用。 Bundle不适用于图像,因为它是为String(可序列化)数据生成的。我可以将图片保存到数据库或在某处存档,但这不是必需的。我在某处读过,可以通过Loader完成,但我不知道如何?可能吗?

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

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

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

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

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

+0

“此方法已弃用。改为使用新的Fragment API setRetainInstance(boolean);“也许试试看Frament API?http://developer.android.com/reference/android/app/Fragment.html – javajavajava 2012-07-09 21:16:28

+0

@ user1454749那么老版本的Android呢?一个我们仍然在Android 2.x – Izkata 2012-07-09 21:37:51

+0

是的,我注意到这一点ofcourse ..但它总是更好地看到解决方案的例子..尤其是如果你是初学者... – 2012-07-09 21:37:57

回答

0

我已经回答了某个地方,我找到了一个很好的例子:阅读this。 。

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

1

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