2012-04-08 17 views
4

ICSでは、UrlConnectionを使用しているときにandroid.os.NetworkOnMainThreadExceptionエラーが発生します。これは、自分自身のプロセスで実行されるサービスでこのリクエストを行っていますMessenger経由で非同期的に呼び出されました。android.os.NetworkOnMainThreadExceptionサービスで別のプロセスで

StrictPolicyを変更しても効果はありませんが、引き続きエラーが発生します。

どうすればよいですか?

編集:このサービスは別のプロセスで実行されます。異なるpidなどがあります。

答えて

4

サービスはまだdocumentationごとに、メインスレッド上で実行します。

なお、そのホストプロセスのメインスレッドで実行する他のアプリケーションのオブジェクト、のようなサービス、。これは、あなたのサービスがCPUを集中的に(例えばMP3再生)やブロックする(ネットワーキングのような)操作を行う場合、その作業を行う独自のスレッドを生成するはずであることを意味します。これに関する詳細は、「プロセスとスレッド」を参照してください。 IntentServiceクラスは、独自のスレッドを持つServiceの標準的な実装として使用でき、実行する作業をスケジュールします。

したがって、UrlConnectionなどの長時間実行するタスクの場合は、IntentServiceのようなものを使用するか、新しいスレッドを自分で作成する必要があります。

+2

このサービスは別のプロセスで実行されます。 – Vadi

+0

他のアクティビティやサービスとは別のプロセスで実行されるかどうかは関係ありません。サービス内で直接実行されているコードは、そのプロセスのメインスレッドで実行されます。代わりにIntentServiceを使用すると、onHandleIntent()で実行されるコードに対して新しいスレッドが自動的に作成されます。 – AdamK

+0

メインタスクとはまったく別のプロセスにあるサービスのタイマーで実行されているタスクは、メインプロセスのUIスレッドに影響します。 ネットワークに接続しているときにUIがフリーズすることはありません。 – Vadi

0

Threadにネットワークのものを入れてください。この例外は、UIのフリーズ(ネットワークジョブのために時間がかかることがある)のようないくつかの問題を防ぐためにスローされます。

関連する問題