通过有效的UI性能来持久保存数据的有效方法

时间:2012-07-13 11:41:36

标签: java android database

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

public class Statistic {
     private int id,value;
}

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

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

如果由于数据库延迟而从UI线程调用,则在对象的getter / setter方法中使用对DataBase Adapter的调用可能会影响应用程序性能。例如,如果我想显示一个包含所有Statistics的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());
    }

    ....

 }

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

由于

1 个答案:

答案 0 :(得分:0)

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

例如,getter_statics的API可能是:

Request getStatics(RequestCallback callback);

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

requestCallback将在调用getStatics的同一个线程中调用,通常是UI线程。

Android中提供了两个类,可帮助您实现此常见模式:HandlerSyncTask。请阅读该文档以获得透彻的理解。

您还可以查看this文章。