Java Android设计模式,每个领域中的对象类的单例组合?
我正在realm中设计一个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 {
@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) {...