2

私は複数の開発者がいるプロジェクトに取り組んでいます。私たちは1つのかなり大きなアプリに取り組んでいます。すべての開発者には、メインアプリ全体のサブアプリと見なすことができるいくつかのアクティビティがあります。

これは最良の設計ではないかもしれないことを私は理解していますが、それは存在し、私たちはそれをなんとかして処理しなければなりません。

ここでの主な問題は、常にアクティブでI / Oなどをチェックし、すべてのサブアプリ/アクティビティにステータス変更を与えることができるマスターが必要であるということです。「インターネットに接続できなくなった」など。

現在、そのマスターはシングルトンであり、ランチャーアクティビティによって最初にインスタンス化され、アクティビティが受信する更新に応じて適切なインターフェイスを渡すことで、すべてのアクティビティ/サブアプリに登録できます。

これは機能していますが、シングルトンはインターネットやGPSなどのシステムステータスを決定するためにシステムリソースにアクセスするためのコンテキストを必要とするため、正しく感じられません。シングルトンがOSによって強制終了された場合、シングルトンは何らかの形でコンテキストを取得する必要があるため、単純な「getInstance」はあまり効果がありません。Applicationクラスを拡張し、そこで静的メンバーコンテキストを作成する方法について読みましたが、この変数は揮発性である必要があり、アプリ全体がクラッシュ後の再起動/強制終了状態にある場合はnullを返す可能性があります。安全ではありません。

また、マスターが何らかの形でユーザーダイアログを開いてユーザーに警告などを表示する可能性もあります。これらの警告はアプリ全体で同じように見えるはずであり、開発者はいつ、なぜ突然ポップアップするのかを心配する必要はありません。現在、これらのメッセージは、すべてをオーバーレイするカスタムトーストとして表示されます。もちろん、コンテキストが必要であり、アプリが閉じようとしている場合は問題が発生する可能性があります。

全体として、それは私たちが直面している混乱であり、私は解決策を探しています。

では、さまざまなアクティビティに情報を渡したり、警告などを投稿したりできる、安全なマスターオブジェクトまたはアクティビティ(またはサービス)を作成するにはどうすればよいですか(アクティビティを閉じるか、少なくともアクティビティを閉じるように命令することもできます)。 can_closeインターフェイスを登録します)。

クラッシュ後にAndroidがアクティブだったアクティビティのみを再起動した場合、Androidも再起動するか、少なくとも以前と同じ情報を取得/提供することができます。

すべてのアイデアは歓迎されますが、アプリの全面的なオーバーホールは不可能です(時間と人員の不足)

4

2 に答える 2

3

ここにいくつかのアイデアがあります:

  1. Service実行する必要のあるすべての監視用のコンポーネントを作成します。私が正しく理解していれば、このサービスは一部のアクティビティが実行されている場合にのみ必要になります。だからあなたはそれをbound サービスにすることができます。開始時にこのサービスへのすべてのアクティビティbindを許可し、終了時にバインドを解除します。最初のアクティビティがバインドされると、サービスが開始されます。
  2. すべてのアクティビティの基本クラスを作成します。ここにすべての一般的なコードを書くことができます。たとえば、マスターサービスにバインドしてメッセージを交換するためのコード。このクラスには、ユーザーに通知するためのユーティリティメソッドなどを含めることもできます。したがって、すべてのアクティビティは通知に同じメソッドを使用します。
  3. ユーザー通知の場合、通知をキャプチャ、集約、および表示できるを使用Status Bar Notificationまたは作成できます。Fragmentこのフラグメントを表示/非表示にするために、基本のActivityクラスに共通のメニュー項目を実装できます。ステータスバー通知を使用する場合は、アプリに1つの集約された通知を使用するようにしてください。そうしないと、さまざまなアクティビティによってステータスバーが乱雑になる可能性があります。
于 2012-10-03T12:24:55.907 に答える
0

一つの解決策は、マスターとして機能するサービスを作成することだと思います。さまざまなアクティビティとは独立して実行する必要があります(ただし、アプリが使用されなくなった場合は、クライアントのバッテリーを使い果たしたくない場合は、自分で管理して適切にシャットダウンすることを忘れないでください)。ただし、サービスはインターフェイス上で動作できないため、ダイアログを開くようにアクティビティにメッセージをブロードキャストする必要があります。

最終的な考え:トーストは問題ありませんが、特にモバイルデバイスでは、インターフェイスをブロックするポップアップは非常に悪いです。

于 2012-10-03T11:49:28.577 に答える