1

GUI スレッドではネットワーク操作が許可されていないことを理解しました。大丈夫。しかし、ダイアログ ボタンのクリック コールバックでこのコードを使用しても、まだ生成されるのはNetworkOnMainThreadExceptionなぜですか?

new Thread(new Runnable() {                         
  @Override
  public void run() {
    heavyAndTimeConsumingOperation();
  }
}).run();

おそらく、私はこの方法で新しいスレッドを生成していませんか?

4

2 に答える 2

9

.start()ではなく、を呼び出す必要があります.run()

.run()実際に実行される、オーバーライドするメソッドです。
.start()実際にスレッドを開始するシステム提供のメソッドです。

于 2012-06-18T14:18:00.693 に答える
4

SLaks は正しいですが、Android の場合はもっとデリケートな方法があります: AsyncTaskです。

new AsyncTask<Void, Void, Void>(){

    @Override
    protected Void doInBackground(Void... params){
        //Do heavy stuff
    }

    @Override
    protected void onPostExecute(Void result){
        //Do UI stuff after heavy stuff
    }
}.execute();
于 2012-06-18T14:22:16.863 に答える