1

私はいくつかのライブラリコードをjarファイルとして配布しています。開発者はアプリケーションIDを使用して初期化する必要があります。初期化は単なる関数呼び出しです。Androidでのグローバル初期化

MyLibrary.initialize("16ea53b"); 

難しいことは、この初期化呼び出しを行う方法を開発者に指示する方法がわかりません。最初は、主なアクティビティの1つの静的イニシャライザブロックが最も簡単な方法であると考えました。問題は、ユーザーが他の何らかのアクティビティーまたはインテントによってアプリケーションに入り、メインアクティビティーがロードされないことです。アプリケーションの起動方法に関係なく、アプリケーションの起動時にコード行が実行されるようにする一般的な方法はありますか?

初期化コールは冪等であるため、使用できるすべての場所でこの初期化コールを行うように伝えることができますが、それは面倒です。

答えて

0

簡単な方法の1つは、ライブラリコードが初期化されたときにSharedPrefencesに何かを保存することです。そして、重要であると思われる場所であれば、この値をチェックして、存在する場合、または初期化または何か(エラーメッセージなど)を要求する場合は続行できます。これにより、開発者は複数回初期化する必要がなくなります。

必ずこの値をリセットするAPIを開発者に提供してください。

また、hereは、Joshua Blochによって、あなたを助けるかもしれないAPIデザインに関する良い話です。

+0

私は私のライブラリにSharedPreferencesへのアクセスを与える方法と同じ問題があると思います - 私はSharedPreferencesにアクセスするために開発者に有効なContextでライブラリを初期化させる必要があります。または、Applicationオブジェクトにアクセスする別の方法がありますか?それは途方もない話です。 – lacker

+0

Androidのガイドラインによると、Applicationクラスからサブクラス化し、それを使ってグローバルデータの保存/管理や静的なシングルトンクラスの使用が可能です。私は個人的にアプリケーションオブジェクトを使用しています。したがって、有効なコンテキストでライブラリを初期化する開発者の方法は意味があります。私はこれのための他のメカニズムについてもっと知りたいです。 – omermuhammed

+0

私はまだ同じ問題を抱えています - 開発者はどこでContextを使ってライブラリを初期化しますか?彼らは、アプリケーションを開始する可能性のあるすべてのクラスからそれを行う必要があります。 – lacker

0

これは、アプリケーションを拡張してそこに配置するクラスの作成を拡張することで解決できる問題のように聞こえますが、これはアプリケーション全体でグローバルです。

+0

個々のアプリについては、これは意味をなさないでしょう。ライブラリ開発者にとっては、すべてのユーザーにアプリケーションのサブクラス化の方法を説明するのではなく、 – lacker

関連する問題