我正在使用LruCache的扩展名来存储网络调用的结果。目前,缓存是片段中的实例变量(它是唯一需要的位置),并且每次旋转或暂停应用程序时都会重新创建缓存。如何通过轮换和暂停/恢复应用程序来保持缓存持续存在?
我读到我可以使用setRetainInstanceState to handle the rotation case,但这对暂停和恢复情况都没有帮助,并且要求我不要将片段添加到backstack。
我也可以extend Application,但似乎有点非封装,只需要在一个片段中使用缓存。
将缓存放在Service中会是一个好方法吗?我不清楚服务如何与片段交互,但看起来我可以将服务绑定到应用程序,因此它只会在应用程序执行时终止。
答案 0 :(得分:2)
我通常在Application对象本身做这些事情......
class MyApplication extends Application {
private LruCache cache; // or whatever
public Thing getThingFromCache(String key) { /* or whatever */ }
}
...不要忘记将MyApplication放入Manifest ......
<application
android:name=".MyApplication"
android:icon="@drawable/icon"
android:label="@string/name"
>
<!-- whatever -->
</application>
另外,请考虑使用Google提供的网络库Volley。