领域同步(TimerTask和UI线程)

时间:2016-09-03 10:05:46

标签: android multithreading realm

您好我的Android应用程序上运行了一个服务。 在该服务中,我有一个TimerTask,我在同步主UI线程上保存的数据和每5秒运行TimerTask时遇到问题。

示例

  

UI线程 - 100条记录

     

TimerTask线程 - 0记录

每次TimeTask我关闭该线程上的Realm实例,试图在下次执行时获取更新的实例。

我似乎关闭选项不会从缓存中间删除实例,因此下次我Realm.getInstance()时它会提供与之前相同的内容。

关于如何在运行TimerTask时让两个线程具有相同数据的任何想法?

1 个答案:

答案 0 :(得分:0)

你可以做一个可以在1.1.1和1.2.0中运行的黑客攻击(它会在2.0.0之后中断,但是嘿),这会强制新打开的Realm成为最新的实例 -

您可以使用package-internal stuff强制通过与Realm实例关联的HandlerController更新本地线程

package io.realm;

public class RealmRefresh {
    public static void refreshRealm(Realm realm) {
        Message message = Message.obtain();
        msg.what = HandlerControllerConstants.LOCAL_COMMIT;
        realm.handlerController.handleMessage(msg);
    }
}

然后致电

    realm = Realm.getDefaultInstance();
    RealmRefresh.refreshRealm(mRealm);
    //...
    realm.close();