-2

私はAndroid4.0.0バージョンの前に正常に動作するアプリを開発しました。しかし、Android 4.0.0以降のバージョンでは、力が近づいています。メインスレッド例外でネットワークと言います

4

3 に答える 3

8

Android versions 3.0アプリケーションがクラッシュする理由Android 2.xは、HoneyComb IceCreamSandwich JellyBeanUIスレッドに対する悪用についてはるかに厳しいためです。たとえば、実行中HoneyComb以上のAndroidデバイスがUIスレッドでネットワークアクセスを検出すると、次のNetworkOnMainThreadExceptionようにスローされます。

E/AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example/com.example.ExampleActivity}:android.os.NetworkOnMainThreadException

これが発生する理由に関する説明は、Android開発者のサイトに詳しく記載されています。

NetworkOnMainThreadExceptionアプリケーションがメインスレッドでネットワーク操作を実行しようとすると、Aがスローされます。これは、HoneycombSDK以降を対象とするアプリケーションに対してのみスローされます。以前のSDKバージョンを対象とするアプリケーションは、メインのイベントループスレッドでネットワークを構築できますが、お勧めできません。JellyBean、、ICSおよびHoneyComb``でUIスレッドで実行できない他の操作の例は、次のとおりです。

  1. ソケット接続を開く(つまり、新しいSocket())。
  2. HTTPリクエスト(つまり、HTTPClientとHTTPUrlConnection)。
  3. リモートMySQLデータベースに接続しようとしています。
  4. ファイルのダウンロード(つまり、Downloader.downloadFile())。

UIスレッドでこれらの操作のいずれかを実行しようとしている場合は、それらをワーカースレッドでラップする必要があります。これを行う最も簡単な方法は、を使用AsyncTaskすることです。これにより、ユーザーインターフェイスで非同期作業を実行できます。AsyncTaskは、ワーカースレッドでブロック操作を実行し、スレッドやハンドラーを自分で処理しなくても、UIスレッドで結果を公開します。

于 2012-10-15T13:37:21.243 に答える
1

「メインスレッド例外のNetwok」自称のようですね。

    new Thread(new Runnable() {
        public void run() {
            yourNetworkStuff();
        }
    }).start();
于 2012-10-15T13:20:23.730 に答える
0

エラー自体は、メインスレッドでネットワーク(URL接続)に接続するコードを記述していることを示しています。AsyncTaskを拡張するAsyncクラスを書くことができます。他のスレッドを実行します。

于 2012-10-15T13:28:38.463 に答える