2011-12-13 11 views
0

私たちは、リクエストを送信し、サーバーからの応答を受信するアンドロイドアプリケーションを開発しました。これにより、UIが更新されます。このアプリケーションは非常に多くの異なるタイプのリクエストを処理し、サーバーを表示するだけでなく、ステータスバーのステータス このアプリケーションには50以上のさまざまなアクティビティがあり、すべてのリクエスト/レスポンスとこのサービスにバインドされているすべてのアクティビティを1つのサービスが処理するため、誰でもリクエストを送信してサービスにバインドし、リクエストを送信して応答を返します。バックグラウンドサービスを個別のプロセスとして実行するにはどうすればよいですか?

私たちが直面している問題は、サービスがより過負荷になっているように思われるために非常に多くのリクエスト/レスポンスが追加されたためです。アプリケーションも非常に遅くなります。 私たちはアンドロイドを含む別個のプロセスとしてサービスを作ることに決めました:マニフェストファイルのサービスのプロセスとそのためにAIDLを実装しようとしました。 しかし、それぞれのアクティビティがサービスとの接続を確立し、textView、ハンドラ、アクティビティをService register()メソッドを使用してサービスに送信するので、それほど簡単ではありません。 AIDLはプリミティブ型しかサポートしていないので、AIDLに行くことはできません。 だから私の疑問は:

です。私たちは別のプロセスとしてサービスを作ることができますか?それは同じアプリケーションで同じapkでパッケージ化されるべきですか?

AIDL(私がAIDLがプリミティブ型のみをサポートしていることを知っている限り)を実装すると、アクティビティがサービスに依存してサービスに依存し、それらのオブジェクトおよびアクティビティをサービス更新するサービスに依存する上記の状況をどのように処理するか?

。アクティビティはサービスのいくつかのメンバ変数を使用しているので、AIDLに変更すると、それらのメンバ変数を使用する方法(これらのメンバ変数はカスタムオブジェクトです)?

私はいくつかの例で問題を説明するために最善を尽くしましたので、貴重な情報を提供してください。

よろしくお願いします。 Piks。

答えて

2

テキストビューへの参照を送信することは絶対に必要ですか? android:process=":remote"の追加のような音が欲しいものですが、別のプロセスでサービスを実行している場合は、UI参照を渡すべきではないと思います。サービスからの応答に基づいてテキストビューを更新できませんか?

あなたが他のアプリケーションからのアクセスを許可されていない場合は、ここで説明するように、あなただけのhttp://developer.android.com/guide/developing/tools/aidl.html

をバインダーを使用することができますこれは、我々は、オブジェクトのリストを渡すためにやったことで、それがうまく働きました。

+0

私たちの設計通り、私たちはカスタムステータスバーとアイコンの領域を更新する必要がありますので、サービスにバインドされている誰でもそれらのrefを渡す必要があります。しかし、AIDLのアプローチでは、サービスに渡すためにそれを使用することはできませんbecoz私たちはUIのスタブを使用してサービスを取得し、AIDLはプリミティブ型以外をサポートしていません。 – piks

+0

同じプロセスでサービスを実行し続けるべきであるような音がします。リモートプロセスとローカルのどちらを使用する場合でもパフォーマンスが向上していることを確認するためにテストしましたか? – Chase

+0

いいえ、私は検証していませんが、アンドロイドの開発者ガイドに従って、サービスを別のプロセスとして実行すると、パフォーマンスが向上します。 – piks

関連する問題