android - RoboSpice 在用户点击主页按钮时请求结果

标签 android activity-lifecycle robospice

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

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

方向更改工作正常。我们将 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;
    }

}

我们在 fragment 中的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());

我们是否遗漏了什么?

最佳答案

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

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

也就是说,如果你想重新连接到一个挂起的请求,请查看 spice 管理器方法。您将看到一个 addListenerIfPending something 方法。这就是这样做的方法。 RS 还让您检查是否存在这样的待处理请求。您还可以检查缓存是否已经包含您的数据等等。

关于android - RoboSpice 在用户点击主页按钮时请求结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23697285/

相关文章:

android - API 驱动的应用程序 - 嵌套 fragment - 在哪里进行 API 调用? onStart 与 onResume 上的 onCreateView

android - 如何使用 Mockito 沿 Robospice 和 Retrofit 测试 API?

android - 在 BroadcastReceiver 中使用 RoboSpice

android - Zygote 预加载 vs boot.art 加载

android - 如何在android中创建图像 ScrollView 的位图?

java - 广播接收器使某些设备中的应用程序崩溃

android - 在哪里可以使用 onSaveInstanceState 传递不同 Activity 的参数?

android - Activity onStart() 操作导致黑屏

android - 将 RoboSpice 与 Jackson2 和 Spring 结合使用

android - 如何在 AsyncTask 中执行函数?