我在我的firebase服务中使用realm并且我在我的finally块中关闭了realm的实例但是当我在try块中执行异步操作时会出现问题,在这种情况下finally在异步完成和域之前执行实例已关闭,导致应用程序崩溃,因为异步操作执行与领域相关的任务。
try {
// perform async task that requires realm
} catch (Exception e) {
e.printStackTrace();
} finally {
if (realm != null && !realm.isClosed())
realm.close();
}
这是代码粗略的样子。如果我尝试在其他任何地方关闭realm实例我得到一个错误,说我从错误的线程访问领域实例,有没有办法我可以等到异步操作是完成后才关闭领域实例。
答案 0 :(得分:0)
因此,您实际上无法在try / catch块中执行异步任务。
......并且"不能"#34;我并不是说这是不好的做法,我的意思是根据"异步"的定义,这根本不可能。
您在try / catch块中执行的操作是将任务排入队列,以便稍后执行。一旦任务入队(未执行!),就会退出try / catch块。
如果你想在异步执行的代码周围使用try / catch块,你需要在异步任务的一部分执行它。
此外,正如您将在documentation中看到的那样,您无法在线程之间传递大多数Realm对象。您无法在某个线程上打开域,然后将其打开,传递给异步任务。