【发布时间】:2014-05-23 15:19:25
【问题描述】:
我google了很多,但现在我决定问..
我的活动只做一件简单的事情 - 它使用 AsyncTask 从 Internet 下载图片。
但是有很多问题,我不知道如何解决..
1.] 用户在 AsyncTask 下载图片后旋转屏幕.. 我应该如何处理这个屏幕旋转?活动重新创建后在哪里可以临时保存图片?
我不想想要锁定屏幕方向 (android:screenOrientation="landscape") 或自己处理 (android:configChanges="orientation")..
我只是想把图片保存在某个地方..
我知道可以通过使用 onRetainNonConfigurationInstance() 和 getLastNonConfigurationInstance() 来完成,但现在这两个 都已弃用。 Bundle 不适用于图像,因为它是为字符串(可序列化)数据制作的。我可以将图片保存到数据库或某处的文件,但这是不必要的。我在某处读到,它可以由 Loader 完成,但我不知道如何?有可能吗?
2.] 用户旋转屏幕期间 AsyncTask 正在下载图片。
我希望 AsyncTask 继续下载。下载完成后,AsyncTask 应该在 onPostExecute 方法中将图像保存到新的(重新创建的)活动中。
我认为如果 AsyncTask 是活动的内部类,它可以工作..?但是如果我不希望它成为内部类,我必须保存对活动的引用,例如在变量中。但是,如果我将 Activity 的引用作为 AsyncTask 的构造函数的参数发送,并且在屏幕旋转后重新创建 Activity,AsyncTask 中的变量确实引用了原始 Activity,因此新的不知道下载的图片,它必须重新开始下载..
或者 AsyncTask 是下载图像的错误选择?我应该使用其他东西吗?服务?
那么..如何解决这些问题?我相信很多应用程序开发人员也必须解决这个问题。但对我来说这都是希腊语:(
【问题讨论】:
-
"此方法已弃用。请改用新的 Fragment API setRetainInstance(boolean);"也许尝试查看 Frament API? developer.android.com/reference/android/app/Fragment.html
-
@user1454749 旧版本的 Android 怎么样?我们中有 吨 人仍在使用 Android 2.x
-
是的,我当然注意到了这一点。但最好是通过示例查看解决方案。尤其是如果你是初学者...
-
@Izkata for Android 2.x 有一个兼容性库.. :)