【问题标题】:RoboSpice requests results when user taps home button当用户点击主页按钮时,RoboSpice 请求结果
【发布时间】:2014-05-16 14:05:50
【问题描述】:

我们正在使用带有 okhttp 的 Robospice 1.4.12。一切正常,除了在用户点击主页按钮然后返回活动时从请求中获取结果。

示例:我们触发一个请求,然后按下主页按钮,我们等待请求完成,当我们返回活动时,侦听器永远不会收到通知。如果我们在请求完成之前返回,一切正常。

方向更改工作正常。我们将 LruCacheObjectPersister 用于内存缓存。

现在是一些代码:

我们的服务:

public class MyService extends OkHttpSpiceService {

    @Override
    public CacheManager createCacheManager(Application application) throws CacheCreationException {
        CacheManager cacheManager = new CacheManager();
        int cacheSize = 1 * 1024 * 1024; // 1MiB
        cacheManager.addPersister(new LruCacheObjectPersister<LoginModel>(LoginModel.class,
                new LruCache<Object, CacheItem<LoginModel>>(cacheSize)));
        return cacheManager;
    }

}

我们在片段中的onStart:

@Override
    public void onStart() {
        super.onStart();
            //spice manager gets started in base fragment
        spiceManager.addListenerIfPending(LoginModel.class, REQUEST_KEY, new LoginRequestListener());
    }

请求执行:

spiceManager.execute(new LoginRequest(), REQUEST_KEY, DurationInMillis.ONE_DAY,
                        new LoginRequestListener());

我们错过了什么吗?

【问题讨论】:

    标签: android activity-lifecycle robospice


    【解决方案1】:

    这就是 RS 的工作原理。您必须了解,在 Android 上,您永远无法确定按下 home 之前和返回之后的活动是同一个实例。同时,android 可以垃圾收集你的活动。是的,这发生了!

    因此,RS 所做的是它在不同的上下文中执行查询,以确保启动请求上下文的生存时间足以执行请求。活动不是这种情况。

    话虽如此,如果您想重新连接到一个待处理的请求,请查看香料管理器方法。你会看到一个addListenerIfPending something 方法。这就是这样做的方法。 RS 还让您检查是否存在此类未决请求。您还可以检查缓存是否已经包含您的数据等。

    【讨论】:

      【解决方案2】:

      我认为 Robospice 将 CacheManager 存储在 Service 中。但是 Service 使用绑定来与 ServiceManager 进行通信,当您调用 ServiceManager.shouldStop 时,Service 会死掉,CacheManage 会与他一起。

      解决方案:将 CacheManager 存储为 SpiceService 中的静态字段。对于第一次调用,您创建 CacheManager,对于下一次调用,只需返回静态 CacheManager

      【讨论】:

        猜你喜欢
        • 2015-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        • 2021-09-18
        相关资源
        最近更新 更多