FirebaseMessagingService中的领域

时间:2017-05-11 20:27:38

标签: java android asynchronous try-catch realm

我在我的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实例我得到一个错误,说我从错误的线程访问领域实例,有没有办法我可以等到异步操作是完成后才关闭领域实例。

1 个答案:

答案 0 :(得分:0)

因此,您实际上无法在try / catch块中执行异步任务。

......并且"不能"#34;我并不是说这是不好的做法,我的意思是根据"异步"的定义,这根本不可能。

您在try / catch块中执行的操作是任务排入队列,以便稍后执行。一旦任务入队(未执行!),就会退出try / catch块。

如果你想在异步执行的代码周围使用try / catch块,你需要在异步任务的一部分执行它。

此外,正如您将在documentation中看到的那样,您无法在线程之间传递大多数Realm对象。您无法在某个线程上打开域,然后将其打开,传递给异步任务。