2016-09-03 16 views
0

こんにちは、私はアンドロイドアプリケーションでサービスを実行しています。 そのサービスではTimerTaskがあります。メインのUIスレッドに保存されているデータと、5秒ごとに実行されているTimerTaskのデータを同期させる際に問題があります。Realm out on sync(TimerTaskとUI Thread)

UIスレッド - 100のレコード

TimerTaskをスレッド - 0レコード

TimeTaskは私が更新されたインスタンスを取得しようとしているスレッドにレルムインスタンスを閉じる行うたびに次の実行時に。

閉じるオプションが中間からキャッシュからインスタンスを削除しないように見えるため、次回にはRealm.getInstance()と同じように提供されます。

TimerTaskを実行しているときに、同じデータを持つスレッドを両方とも持つ方法に関する考え方はありますか?

+0

レルムを呼び出すことができます結果のコピーを作成せずにchangeListenerを追加し、LIVEデータを操作する限り、複数のスレッド間でデータをchronisedします。両方のスレッドが同じRealmデータベースファイルを使用している限り、Realmを再度閉じて開く必要はありません。詳細については、より多くのコードを共有してください。 –

+0

@VirajTank私はTimerTaskが非ルーパの背景スレッドスレッドだと思うので、自動同期しません。 – EpicPandaForce

+0

@EpicPandaForce - ああ、本当にその部分を見逃しましたが、それでも新しいクエリーではうまくいくはずです。 –

答えて

0

1.1.1と1.2.0で動作するハックがあります(2.0.0で後で破損しますが、ちょっと)。これは、新しくオープンしたレルムを強制的に最新のインスタンスにします。

あなたは、デフォルトでシンを提供し、

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); 
    } 
} 

パッケージ内部のものを使用してレルムインスタンスに関連付けられたHandlerControllerを介してローカルスレッドの更新を強制そして

realm = Realm.getDefaultInstance(); 
    RealmRefresh.refreshRealm(mRealm); 
    //... 
    realm.close(); 
関連する問題