0

ユーザー統計を表示するアプリを想像してみてください。次のようなオブジェクトを持つことができます。

public class Statistic {
     private int id,value;
}

異なるアプリの実行間で値が保持される場所。永続的なシステムにデータベースを使用すると、databaseAdapter は次のものを持つことができます。

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

オブジェクトのゲッター/セッター メソッドでデータベース アダプターへのその呼び出しを使用すると、データベースの遅延が原因で UI スレッドから呼び出された場合、アプリのパフォーマンスに影響を与える可能性があります。たとえば、すべての統計を含むアクティビティを表示したい場合、各統計オブジェクトのゲッターのデータベース遅延により、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 には、この共通パターンの実装を容易にする 2 つのクラス ( HandlerSyncTask ) が用意されています。ドキュメントをよく読んで、完全に理解してください。

この記事をチェックすることもできます。

于 2012-07-13T14:50:41.943 に答える