Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android设计模式,每个领域中的对象类的单例组合?_Java_Android_Multithreading_Design Patterns_Realm - Fatal编程技术网

Java Android设计模式,每个领域中的对象类的单例组合?

Java Android设计模式,每个领域中的对象类的单例组合?,java,android,multithreading,design-patterns,realm,Java,Android,Multithreading,Design Patterns,Realm,我正在realm中设计一个android应用程序,它使用非常直接的对象类表示,以图形方式绘制数据: @RealmClass public class Graph implements RealmModel { @PrimaryKey private String UUID; public RealmList<DataSet> dataSets; } @RealmClass public class DataSet implements RealmModel {

我正在realm中设计一个android应用程序,它使用非常直接的对象类表示,以图形方式绘制数据:

@RealmClass
public class Graph implements RealmModel {
  @PrimaryKey
  private String UUID;
  public RealmList<DataSet> dataSets;
}

@RealmClass
  public class DataSet implements RealmModel {
  @PrimaryKey
  private String UUID;
  public RealmList<DataPoint> dataPoints;
}

@RealmClass
  public class DataPoint implements RealmModel {
  private String UUID;
}

 Basically Graph.Contains DataSets.Contains DataPoints
与我创建的其他方法一起:

public void bulkAdd() {
        @Override
        public void execute(Realm realm){
            for(int i=0; i<100;i++){
                //doStuff();
...      });
public void bulkAdd(){
@凌驾
公共void执行(领域){

对于(int i=0;i您可以拥有一个工厂,该工厂生成不同的POJO(图形/数据集和数据点),然后与批量插入一起使用,以将一批对象插入领域:

realm.executeTransactionAsync(新realm.Transaction(){
@凌驾
公共无效执行(领域bgRealm){
Graph Graph=MyFactory.INSTANCE.getGraph();
插入(图形);
}
});
您还可以使用异步事务查询以前从后台线程添加的对象:

RealmResults graphs=realm.where(Graph.class).findalsync();
addChangeListener(新的RealmChangeListener(){
@凌驾
公共void onChange(RealmResults图形){
//更新用户界面
}
});

请注意:不要将领域本身放在单例中,单例意味着无论您从何处访问数据(在您的情况下为领域),它都将返回与领域相反的同一实例。领域实例已被线程限制(ThreadLocal)也就是说,当从同一线程访问时,它将返回相同的实例。

在后台线程上查询并将非托管结果发送到UI线程意味着您将丢失对结果集的惰性评估。我希望您知道?我不知道。当我的应用程序处于“服务/记录”状态时模式下,数据写入领域是一个优先事项,因为数据流速率很高(120hz)。在服务/记录模式下,将以管理速率(在大多数情况下,等于或低于数据输入速率)绘制结果。在“视图”中模式下,我的应用程序将/应该将图表和UI作为从Realm读取的优先线程。您建议我如何为这两种场景构建线程?我注意到Realm现在有内置异步事务,我应该更新问题中的代码。
Realm实例已被线程限制(ThreadLocal)也就是说,当从同一线程访问时,它将返回相同的实例。
是,但是
getDefaultInstance()
close()
@Nabil成对使用引用计数,感谢您的回答,这回答了另一个问题(部分)关于将领域放在何处。目前,我有一个承载片段的it活动级别。我已经看到它在应用程序级别上完成了,您建议这样做吗?考虑到让领域在服务片段上写入优先级的要求,同时仍然能够驱动UI元素,我应该将我的领域实例放在何处,以便从中进行一致的访问singleton和fragments?服务模式需要在后台运行选项,因此它可能会在该模式下扩展服务。Panda这很有意义,谢谢。
public void bulkAdd() {
        @Override
        public void execute(Realm realm){
            for(int i=0; i<100;i++){
                //doStuff();
...      });
    private void asyncAddQuote() {
    ...
    AsyncTask<Void, Void, Void> remoteItem = new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {...