0

私はAndroidから始めていますが、DBの読み取りや保存などのバックグラウンドタスクが常にプライベートクラスにカプセル化されているのでしょうか。

つまり、現時点では次のようになっています。

private class SaveToDB extends AsyncTask..
private class ReadFromDB extends AsyncTask..

public void onButtonClick(View v) {
 new SaveToDB().execute();
}

等々。このように、バックグラウンドタスクを実行する場合は、常に新しいオブジェクトを作成する必要があります。それは正しい方法ですか?

私が疑問に思うのは、私のプライベートクラスはすべて「アクション」そのものであり、実際にはオブジェクトではないということです。それらは、たとえば保存または読み取りという名前が付けられているため、通常、クラスではなく、慣例によりメソッドに適用されます。

さらに、私がそれを正しく行っている場合:MyApplication Activity内でプライベートクラスをネストすることは良い習慣ですか?それとも、それらを独自の個別のクラスにリファクトする必要がありますか?

4

5 に答える 5

1

すべてのバックグラウンド コンテンツ管理を処理するサービスを作成できます。したがって、保存したい場合は、サービスにメッセージを送信して、データを書き込むように指示するだけです。これははるかに複雑です。単純なことなら、今とまったく同じようにできます。

編集:

また、Ian が指摘したように、3.0 以降の新しいデータベース インターフェイス クラスを見てください。

于 2012-05-16T13:30:23.977 に答える
0

常にではない。

たとえば、さまざまなアクティビティで使用されるタスクがある場合 (同じインスタンスを共有することについて話しているわけではありません)、パブリック クラスが必要になるため、何度も記述しません。

その (クラスの) タスクを 1 か所でのみ使用する場合は、プライベート クラスを使用すると、コードをよりクリーンに保つことができます。

于 2012-05-16T13:26:35.890 に答える
0
  1. AsyncTask を使用するための正しい方法であり、一度だけ実行できます。
  2. クラス名は、より読みやすいインスタンスDbSaverの代わりにすることができます。SaveToDb
  3. そのクラスが 1 つのアクティビティのみを使用する場合は、それらをネストできます。ただし、異なるアクティビティ内で実行されるタスクがある場合は、独自のファイルを作成することをお勧めします。
于 2012-05-16T13:29:22.447 に答える
0

UI コードからデータベースへのアクセスを疎結合するのは良い設計です。毎回新しいオブジェクトを作成する必要がないようにする 1 つの方法は、データベース アクセス クラスをシングルトンにし、トランザクションを行う必要があるときはいつでもクラスのインスタンスを返すことです。

最後の質問ですが、データベース管理を独自のクラスに移動して、複数のアクティビティにまたがってアクセスできるようにすることをお勧めします。すべてをプライベート クラスで行う場合、データベースへのアクセスが必要な新しいアクティビティがあるとどうなりますか?

于 2012-05-16T13:29:27.467 に答える
0

sqlite データベースと対話するために非同期タスクを起動している場合、最近では最善の方法ではないため、代わりにカーソル ローダーをチェックアウトする必要があります。

http://developer.android.com/guide/topics/fundamentals/loaders.html

http://developer.android.com/reference/android/content/CursorLoader.html

それらについて理解したら、非同期タスクを開始するよりもはるかに簡単です。実際、非同期タスクの上に構築して、説明した問題のいくつかに対処し、構成の変更に寛容です。

AsyncTask (db アクセス用) から離れて、代わりにローダー API を使用することを強くお勧めします。

互換性パッケージにバックポートされているため、Honeycomb より前の古いバージョンで使用できます。

于 2012-05-16T13:34:11.193 に答える