在SyncAdapter上运行Android Room查询

时间:2018-02-23 20:13:11

标签: android android-asynctask android-room android-thread

Android Room查询无法在主线程上执行,通常我会从Activity中使用Handler或AsyncTask。但是,当需要在SyncAdapter中保留数据时,在不同的线程中执行Room查询的正确方法是什么? (我需要对REST API做一些请求并保留结果数据)。

目前我的方式是使用AsyncTask,但是文档说AsyncTask应该是短暂的,并且我在上下文泄漏方面遇到了一些麻烦。

await emptyS3Directory(process.env.S3_BUCKET, 'images/')

更新以澄清当前情况

我的SyncAdapter执行三项操作:

  1. 将本地更改推送到服务器(使用Room查询本地数据库并发布到REST Api);
  2. 获取服务器数据(使用Room查询REST Api并保存到本地数据库);
  3. 从本地数据库中删除旧的(不必要的)数据(使用Room删除)。
  4. 目前,当我需要使用房间访问本地数据库时,我使用AsyncTask,因此我没有收到错误消息,说我无法从主线程访问数据库。

    但是我还必须使用retrofit2 enqueue查询或发布到REST Api,因此它在另一个线程中运行。代码变得一团糟,因为我只能在当前完成后调用下一步,并且在另一个内部创建一个线程,调试很痛苦。

    是不是?我不应该使用其他线程选项吗?

0 个答案:

没有答案