情報は力ではない

VimとかC++とかCUDAとか。

メインスレッドではネットワーク操作を行ってはいけない。

最近、ちょこちょことAndroidの開発を行っている。色々と学ばなければいけないことが多いので、少しずつしか開発が出来ない。
だいぶ古い記事だけど、Androidで広がる,携帯アプリ開発の世界 - 第4回 簡単なRSSリーダーを作ってみる:ITproを写経して
簡単なRSSリーダーを作った。そのコード内でXMLをパースするときにXmlPullParserというものを使っていた。
このXmlPullParserがどういう動作をするのかをもうちょっと知りたくて次のようなコードを書いてた。

public class MainActivity extends ActionBarActivity {
  private static final String FEED_URL = "http://...";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    URL url = new URL(FEED_URL);
    InputStream is = url.openConnection().getInputStream();
    XmlPullParser parser = Xml.newPullParser();
    parser.setInput(is, null);
    ...
}

実行してみたところ、こんな例外が出た。

android.os.NetworkOnMainThreadException

調べてみたところ、メインスレッドでネットワークの操作をするなということらしい。
NetworkOnMainThreadException | Android Developers
「Honeycomb SDK以上(Android 3.0以上)でしか例外は投げられないけど、メインスレッドでネットワーク操作はするなよ」的なことが書いてあった。

今後は気をつけよう。