我正在为database
中的Android Application
使用Realm。
但是,当我尝试从RealmChangeListener
添加/删除Runnable
时,我得到了exception
。
java.lang.IllegalStateException:您无法删除/注册监听器
来自非Looper线程
如果我不使用Runnable,那就很好。
下面是我的代码:
public void clearDatabase(final RealmChangeListener realmChangeListener) {
Realm realm = RealmManager.getNewInstance().getRealm();
realm.addChangeListener(realmChangeListener);
realm.beginTransaction();
realm.clear(RBooking.class);
realm.commitTransaction();
}
工作代码:
protected void clearData() {
mDatabaseManager.clearDataBase(new RealmChangeListener() {
@Override
public void onChange() {
TLog.d("Feb 23 : Database has been clean completed!");
}
});
}
编辑:更新不起作用的代码:
protected void processLogout() {
Runnable runnable = new Runnable() {
@Override
public void run() {
Looper.prepare();
mDatabaseManager.clearDataBase(new RealmChangeListener() {
@Override
public void onChange() {
TLog.d("Feb 23 : Database has been clean completed!");
}
});
Looper.loop();
}
};
doTask(runnable); // excute the runnable
}
因此,任何机构都可以帮助我使RealmChangeListener在Runnable上正常工作。谢谢。
最佳答案
调用Loop.loop()
实际上会阻塞线程,因为该行是开始处理线程上的事件队列的行,因此这就是您的示例不起作用的原因。
目前尚不清楚为什么在这种情况下需要RealmChangeListener吗?但是,如果确实需要RealmChangeListener,则可以使用HandlerThread
:http://developer.android.com/reference/android/os/HandlerThread.html代替普通的Thread
。 HandlerThread有一个循环程序,因此更改侦听器将对此起作用。