1

私が作成したオブジェクトがあるとします。と呼びますMyObject

MyObjectデータベースの対応するテーブルに保存できるようにしたいと思います。Activityのメインスレッドでこれが発生しないようにします。簡単です。これを行うために を作成しましたAsyncTask

ただし、私のアプリケーションにはIntentService、デバイスのデータベースとクラウド データベースの間でデータを同期するために使用されるものもあります。MyObjectクラウドからデバイスのデータベースに同期した もここから保存したいと思います。ただし、これが で非同期に発生することは望ましくありませんIntentServiceIntentServiceのメインスレッドで発生させたいです。

目的は明らかに、このコードをモジュール化して、複製する必要がないようにすることです。

セーブ コードをモジュール化して、非同期と同期の両方で呼び出せるようにするにはどうすればよいですか?

saveMe()内にメソッドを作成し、MyObjectそれを と宣言すると思いますstatic。から、IntentService単に を呼び出しますsaveMe()。からActivityを起動し、AsyncTaskを渡し、MyObjectを呼び出しますsaveMe()。そうですか?

4

2 に答える 2

1

それはstaticいいと思いますが、インスタンス変数にアクセスしたくありませんか?

アプリケーションが一般的にどのように設計されているかはわかりませんが、おそらく次のパターンのいずれかを使用します。

  • Runnable適切なファクトリまたはコンストラクタを使用して、一般的に保存を処理する(またはCallable戻り値や例外が必要な場合)のサブクラス。その後、これらのタスクを直接またはバックグラウンド スレッドで実行できます。
  • オブジェクトのインスタンスには、それ自体を保存するメソッドがあり (これはあなたが説明したものです)、これらのメソッドは同期コードまたは非同期コードで使用されます。
  • データベース/ストレージ クラスのMyObjectインスタンスには、そのコードを配置できる共通の親クラスがあり、これらのメソッドが同期コードまたは非同期コードで使用されると仮定して、インスタンスを保存するメソッドがあります。

正確なパターンは、私見で作業しているアプリケーションによって異なります。

于 2013-07-31T16:41:36.567 に答える