AndroidアプリのサービスクラスでREST WebServiceを呼び出すと、NetworkOnMainThreadException
が作成されます。Android:サービスでネットワークを使用する
私はこの例外がアクティビティで発生する理由を理解しています:ネットワーク上で何かを同期的にフェッチすることは非常に悪いことですが、サービスクラスで同じエラーが発生するのは驚きです。 私の質問は次のとおりです。
この特定のケースでは、StrictMode.setThreadPolicy()
を使用してこの呼び出しを許可する必要があります。 (そして、彼らが活動にこのエラーが発生したので、これを読んでいるもののために、AsyncTaskを使用して、このエラーを非表示にするStrictModeを使用していない)
-or私はAsyncTaskを使用する必要がありますか?その場合、ここで問題は何ですか?スレッドのサービスがアクティビティのサービスから分離されていませんか?
あなたの答えをありがとう、それは私が疑うものです。私はそれらがバックグラウンドタスクのために使用されていると仮定していました。サービスはデフォルトで別のスレッドに置かれますが、そうではありません。 実際に私は 'MediaPlayer'への呼び出しを管理するためにそのサービスを使用していますので、 'prepareAsync()'を使用すると、その動作をエレガントに管理できるため、メインスレッド上で問題を起こすようなことはありません。 ストリーミングURLを取得するために 'AsyncTask'を使用するには、サービスを変更するだけです。 – Teovald
幸いですが、あなたのアプリが最適化されていることを確認するために、ネットワークを効率的に使用する方法を理解するのに役立つ資料もあります。 http://developer.att.com/developer/forward.jsp?passedItemId=7200042 –