0

Androidユーザーからデータを受け取り、バックグラウンド作業を行うライブラリを作成しています。

現在、クライアント アプリと直接対話するクラスには、クライアント アプリが呼び出すためのプライベート オブジェクトとパブリック静的メソッドがあります (私は .NET ではなく静的メソッドを選択しましたsingleton pattern)。またinitialize()、ライブラリを初めて使用するときに、クライアント アプリがメソッドを呼び出す必要があります。

これは、どのアクティビティが最初に呼び出されるかをクライアント アプリが認識している必要があります。アプリケーションが多数の異なるアクティビティで開始できる場合、問題が発生します。

私のオプション:

  1. すべてのアクティビティでユーザーに初期化を強制し、ライブラリが既に初期化されているかどうかを内部的に維持します。
  2. 別のデザイン パターンに従います。

私はこれに間違った方法でアプローチしていますか? ライブラリの優れた設計手法とは?

4

2 に答える 2

1

開発者はどのアクティビティがアプリケーションを開始するかを知っていると考えるのが安全な仮定ですが、誰かが知らなかった場合にライブラリを使用することにした場合、初期化プロセスをある程度インテリジェントにすることができます。

たとえば、ライブラリが初期化されているかどうかを追跡するブール値フラグをライブラリに追加できます。このようにして、この値を返す関数を持つことができます。true の場合、ライブラリは既に初期化されています。そうでない場合は、初期化されていません。

少しかさばるように見えますが、ライブラリが初期化されていない場合は、潜在的な起動アクティビティの onCreate() 関数で単純な if ステートメントを実行するだけで済みます。

または、ユーザーが初期化関数を必要なだけ呼び出すことができるようにしますが、そのブール値を追跡します。if ステートメントを初期化関数に入れ、既に初期化されている場合は何もしません。

このように、プログラマーがしなければならないのは、

someLibrary.initialize();

問題の各アクティビティの各 onCreate() メソッドで。実際に初期化されると、後続の各呼び出しは何もしません。

また、余談ですが、initialize メソッドが不要になるようにコードを変更してみる価値があるかもしれません。初期化関数は正確に何をしますか?

于 2013-06-20T14:46:12.447 に答える
0

Application クラスは私が探していたものだと思います。ありがとうアマルビット。

于 2013-06-20T14:54:57.063 に答える