我有一个片段,可以创建AsyncTask
来下载和解析RSS源,然后将其显示在列表中。问题是,下载的feed存储在RSSFeed
对象中,并且在屏幕旋转后重新创建片段时,它变为null。这意味着每次用户旋转屏幕时,应用程序都必须重新下载Feed,浪费时间和带宽。我可以让它加载一个xml的缓存副本,但这仍然需要时间,而且是糟糕的用户体验。
到目前为止,我一直在片段中使用setRetainInstance(true)
,它似乎有效。但是,我最近读过,建议不要在带有UI的片段中使用setRetainInstance(true
),这是关于泄漏上下文的。我还看到其他人说只要在重新创建活动后重新为视图重新分配值,它就可以,甚至可以推荐。我不确定答案的准确程度,这里的一些帮助将不胜感激。
假设我没有使用setRetainInstance(true)
,并且在配置更改时重新创建了片段,我想要一种保留该对象的方法。如果它是一个字符串或int我知道使用onSaveInstanceState和一个bundle,但事情是这个feed是不可序列化的,也不建议序列化和反序列化一个可能很大的对象。所以第二个问题是,我该怎样做才能保留Feed,所以我不必重新加载它?