私たちは、リクエストを送信し、サーバーからの応答を受信するアンドロイドアプリケーションを開発しました。これにより、UIが更新されます。このアプリケーションは非常に多くの異なるタイプのリクエストを処理し、サーバーを表示するだけでなく、ステータスバーのステータス このアプリケーションには50以上のさまざまなアクティビティがあり、すべてのリクエスト/レスポンスとこのサービスにバインドされているすべてのアクティビティを1つのサービスが処理するため、誰でもリクエストを送信してサービスにバインドし、リクエストを送信して応答を返します。バックグラウンドサービスを個別のプロセスとして実行するにはどうすればよいですか?
私たちが直面している問題は、サービスがより過負荷になっているように思われるために非常に多くのリクエスト/レスポンスが追加されたためです。アプリケーションも非常に遅くなります。 私たちはアンドロイドを含む別個のプロセスとしてサービスを作ることに決めました:マニフェストファイルのサービスのプロセスとそのためにAIDL
を実装しようとしました。 しかし、それぞれのアクティビティがサービスとの接続を確立し、textView、ハンドラ、アクティビティをService register()
メソッドを使用してサービスに送信するので、それほど簡単ではありません。 AIDL
はプリミティブ型しかサポートしていないので、AIDL
に行くことはできません。 だから私の疑問は:
です。私たちは別のプロセスとしてサービスを作ることができますか?それは同じアプリケーションで同じapkでパッケージ化されるべきですか?
。 AIDL
(私がAIDL
がプリミティブ型のみをサポートしていることを知っている限り)を実装すると、アクティビティがサービスに依存してサービスに依存し、それらのオブジェクトおよびアクティビティをサービス更新するサービスに依存する上記の状況をどのように処理するか?
。アクティビティはサービスのいくつかのメンバ変数を使用しているので、AIDL
に変更すると、それらのメンバ変数を使用する方法(これらのメンバ変数はカスタムオブジェクトです)?
私はいくつかの例で問題を説明するために最善を尽くしましたので、貴重な情報を提供してください。
よろしくお願いします。 Piks。
私たちの設計通り、私たちはカスタムステータスバーとアイコンの領域を更新する必要がありますので、サービスにバインドされている誰でもそれらのrefを渡す必要があります。しかし、AIDLのアプローチでは、サービスに渡すためにそれを使用することはできませんbecoz私たちはUIのスタブを使用してサービスを取得し、AIDLはプリミティブ型以外をサポートしていません。 – piks
同じプロセスでサービスを実行し続けるべきであるような音がします。リモートプロセスとローカルのどちらを使用する場合でもパフォーマンスが向上していることを確認するためにテストしましたか? – Chase
いいえ、私は検証していませんが、アンドロイドの開発者ガイドに従って、サービスを別のプロセスとして実行すると、パフォーマンスが向上します。 – piks