0

私の Android アプリでは、スレッドを使用してインターネットからイメージをダウンロードしますが、なんらかの理由で Galaxy nexus でアプリを実行すると、networkonmainthread 例外がスローされますが、エミュレーターでアプリを実行するとスローされません (テスト済みの Android バージョン 2.3. 3 および 4.0.3)。

Thread ImageLoaderThread = new Thread(new Runnable() {
public void run() {

 bitmap= DrawableManager.fetchDrawable(URL);

 });

起動時に直接スレッドを開始すると GUI の起動が遅いため、スレッドが実際に GUI スレッドで実行されているような印象を受けます...しかし、なぜですか?

4

1 に答える 1

0

それはあなたがどのように構築するかによって異なります。デバイスのビルド時にHoneycomb SDK (Android 3.0 以降用) を 使用してビルドしています。NetworkOnMainThreadException古い SDK でスローされることはありません。

少なくとも 2.3.3 でテストするためにビルドするときは、エミュレーターに同じ SDK を使用していません。2.3.3 と 4.0.3 でテストするときに同じビルド構成を使用すると、表示されるすべての結果が完全に説明されます。

メイン スレッドでネットワークにアクセスすることは決して良い習慣とは見なされませんでした (ネットワークの応答を待っている間、他のスレッドが UI を提供できないため、UI の応答性が懸念されます) が、Honeycomb まで API で厳密に禁止されていませんでした。

このチュートリアルを読んで、ネットワーク アクセスをAsyncTask.

于 2012-07-13T12:35:47.297 に答える