0

想象一个显示用户统计信息的应用程序。我可以有一个像这样的对象:

public class Statistic {
     private int id,value;
}

值应该在不同的应用程序执行之间保持不变。为持久系统使用数据库,databaseAdapter 可以具有:

public void saveStatisticValue(int id,int newValue);
public int getStatisticValue(int id);

如果由于数据库延迟从 UI 线程调用,在对象的 getter/setter 方法中使用对数据库适配器的调用可能会影响应用程序性能。例如,如果我想显示一个包含所有统计信息的 Activity,每个 Statistic 对象的 getter 的数据库延迟可能会导致 ANR。

public class Statistic {

    ....

    public synchronized void setValue(int newValue) {
        dbAdapter.saveStatisticValue(this.getId(),newValue);
    }
    public synchronized int getValue() {
        return dbAdapter.getStatisticValue(this.getId());
    }

    ....

 }

是否有某种方法可以减少此类模型对数据库的影响?

谢谢

4

1 回答 1

0

正如您已经观察到的,模型的 geter/setter 方法应该是异步的。

例如,getter_statics 的 API 可以是:

Request getStatics(RequestCallback callback);

interface RequestCallback {
        void notify(int id ,int value);
}

requestCallback在与被调用的线程相同的线程中getStatics调用,通常是 UI 线程。

Android 中提供了两个类来帮助您实现这种通用模式: HandlerSyncTask。请阅读文档以获得彻底的理解。

你也可以看看这篇文章。

于 2012-07-13T14:50:41.943 回答