HOMEに戻る(ブログのみを御覧の方専用)
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

[Android]Android 4.0での通信処理とスレッド
激動のAndroidですが、今からアプリ開発を始めるなら、Android 4.0からをターゲットとするのが良いのではないでしょうか。

と思って、Android 2.2用に書いてたプログラムを、4.0用に移植したんですよ。
そしたら、エラーが出るわ出るわ…。

今回バグを取った中でメモしておきたいと思ったのは次の二つ。

1. 通信処理を行うとNetworkOnMainThreadException発生
2. マルチスレッドにしてUI操作を行う際に「Handler」を使う


1. 通信処理を行うとNetworkOnMainThreadException発生
これは2.2まではうまく行っていましたが、4.0で発生しました。
原因はRainbowDevilsLandさんに書いてあります。

Android3.0からメインスレッド(UIスレッド)から通信を行うとNetworkOnMainThreadExceptionが発生するようになったようだ。



とのことです。
なので、新しくスレッドを起こして、そこで通信処理する必要があります。


2. マルチスレッドにしてUI操作を行う際に「Handler」を使う
で、マルチスレッドにして通信処理させて。
処理が終わると同時にダイアログを出してUIを更新するプログラムにしていましたが、ここで例外発生。
どうやら、UI処理をメインスレッドからサブスレッドに持ってきたのが原因のようです。

これについてはthrow Life - AndroidのHandlerとは何か?さんの説明がわかりやすかったです。
要点としてまとめられている以下を読めば、何がいけなくてどうしなきゃいけないかが見えてきます。

・AndroidのUI操作はシングル・スレッド モデル
・ユーザビリティ向上の為にはマルチスレッドが必要
・Handlerで実現
・Handlerを使わない場合に起きる例外は実行スレッドのチェックで発生
・Handlerを使うと、UI Threadの持つキューにジョブを登録できる
・キューはUI Threadにより実行される
・別スレッドからUI Threadに処理を登録するのでスレッドチェックで例外が発生しない


後は上記サイトのサンプルを見れば、なるほど!と。
[PR]
by icemintken | 2012-02-02 23:28 | Androidアプリ開発
<< シグマ 18-50mm F2.... Kyocera Echo、起動... >>


その他のジャンル

ファン

記事ランキング

ブログジャンル

画像一覧