私はAndroid4.0.0バージョンの前に正常に動作するアプリを開発しました。しかし、Android 4.0.0以降のバージョンでは、力が近づいています。メインスレッド例外でネットワークと言います
3 に答える
Android versions 3.0
アプリケーションがクラッシュする理由Android 2.x
は、HoneyComb IceCreamSandwich とJellyBeanがUIスレッドに対する悪用についてはるかに厳しいためです。たとえば、実行中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スレッドで実行できない他の操作の例は、次のとおりです。
- ソケット接続を開く(つまり、新しいSocket())。
- HTTPリクエスト(つまり、HTTPClientとHTTPUrlConnection)。
- リモートMySQLデータベースに接続しようとしています。
- ファイルのダウンロード(つまり、Downloader.downloadFile())。
UIスレッドでこれらの操作のいずれかを実行しようとしている場合は、それらをワーカースレッドでラップする必要があります。これを行う最も簡単な方法は、を使用AsyncTask
することです。これにより、ユーザーインターフェイスで非同期作業を実行できます。AsyncTaskは、ワーカースレッドでブロック操作を実行し、スレッドやハンドラーを自分で処理しなくても、UIスレッドで結果を公開します。
「メインスレッド例外のNetwok」自称のようですね。
new Thread(new Runnable() {
public void run() {
yourNetworkStuff();
}
}).start();
エラー自体は、メインスレッドでネットワーク(URL接続)に接続するコードを記述していることを示しています。AsyncTaskを拡張するAsyncクラスを書くことができます。他のスレッドを実行します。