我谷歌很多,但现在我决定问......
我的活动只做一件简单的事 - 它使用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是下载图片的不好选择吗?我应该用别的吗?服务?
那么..如何解决这些问题?我相信很多应用程序开发人员也必须解决这个问题。但对我来说这都是希腊语:(
答案 0 :(得分:1)
当AsyncTask完成下载图像后,将其保存到应用程序的缓存目录中。在Activity类的属性中保留已保存图像的路径。然后,您可以覆盖活动的onSaveInstanceState
方法,以便在方向更改期间将缓存的图像路径传递给自身。在onCreate
方法中,检查savedInstanceState
包中是否有已保存的图片路径。如果该路径存在,请勿尝试重新下载该映像。相反,只需从磁盘加载图像。
答案 1 :(得分:0)
我已经回答过某个地方。我找到了一个非常好的例子:阅读this。这个旧API的例子。
对于新的,您可以使用片段的setRetainInstance
方法(如果您使用片段)。