3

この回答では、AndroidManifestを使用しandroid:launchMode="singleTask"てアクティビティを単一のインスタンスに制限することをお勧めします。

これは、すべてのアクティビティがプロジェクトの一部であるアプリケーションには最適ですが、アプリケーションのメインアクティビティが定義されているライブラリプロジェクトを使用するアプリケーションが複数ある場合、ライブラリプロジェクトのAndroidManifestは無視されるandroid:launchMode="singleTask"ため、そこでその属性を実際に使用することはできません。。

これをアプリケーションのAndroidManifest.xmlで使用すると、各アクティビティの名前が異なり、この属性は、この共有アクティビティ(ライブラリプロジェクトとして使用)を使用する異なるアプリケーションではなく、同じアプリケーションandroid:launchMode="singleTask"のみの単一のインスタンスに制限されます。

私が本当に望んでいるのは、常に1つのアプリケーション(その共有ライブラリプロジェクトのアクティビティを使用するさまざまなアプリケーションの中で)のみを実行できることです。

これは属性を使用して実行できandroid:launchMode="singleTask"ますか?

これが不可能な場合、他にどのようなアプローチが推奨されますか?

4

2 に答える 2

3

を使用してみてくださいIntent.FLAG_ACTIVITY_REORDER_TO_FRONT。アクティビティを起動するたびに、そのアクティビティのインスタンスが存在する場合、そのアクティビティはスタックの先頭に移動され、2回目には作成されません。これにより、常に1つのアクティビティのみがスタックに残ることが保証されます。

別のアプローチは、静的変数を使用することです。しかし、これがどれほど信頼できるかはわかりません。

于 2012-07-06T02:40:23.083 に答える
2

ライブラリ プロジェクトは、コードを再利用するために使用するものです。アプリケーションがコンパイルされると、結果の.apkファイルは、それを作成するのに役立ったライブラリ プロジェクトを認識しません。.apkとはいえ、ライブラリ プロジェクトのAndroidManifest.xmlファイルを操作して、 (異なる にまたがって) シングルトン プロパティを強制することはできないはずです。

をサブクラス化することで、この動作を強制できる場合がありますApplication。詳細については、こちらをご覧ください。

于 2012-07-02T15:38:02.170 に答える