2011年9月1日木曜日

・ 非同期処理①

事の発端はDialog。
Dialog.show()がその場で実行されてないぞ?!
って思って調べてみたら、onPreExecute()で実行されてる(これは間違い)
かなんか書いてあって、調べてみたら非同期処理がどうとか。
意味がわからないので調べて見たが、とりあえず初歩から。

Thread : (英)糸
じゃないや。プログラミングで言うところのスレッドとは
処理の流れの最小単位です。

ex)じゃんけんのスレッド
「じゃーんけん」と声を出す。

グーを出す。

相手の手と比較する。

負ける。


このスレッドの利用方法は二通りあって
・マルチスレッド ・・・ 複数のスレッドを並列に処理。
・シングルスレッド ・・・ 一つのスレッドを順次処理。

があります。
Androidは後者です。

Activityが生成されたと時に持っているメインのスレッドを
UIスレッドと言うんですが、それも例外ではありません。
普段Androidで使ってるアプリだって、全部1つの流れで実行されています。

でも、普通に考えてものすごい効率が悪いと思いませんか?
例えば動画サイトから動画をダウンロードして再生したい。
ってなった時に、UIでその処理されるとそのアプリはダウンロードが
始まるまでずーっと何の作業も出来ず待ってるだなんて。


そこで利用したいのがマルチスレッド。
でも、Androidはシングルスレッドやし。。。

大丈夫です。
Androidはプログラム上で疑似マルチスレッドモデルを作り出す方法があります。

プログラム内にもう一個スレッド作ってやればいい。

Thread trd = new Thread(new Runnable() {
    public void run() {
        /* ここに処理書く */
    }
);

trd.start();

だけです!やー、なんと簡単なんだ!
しかしながら、新しいスレッドを立ててしまったら、UIを操作することができません。
なぜか、Androidはシングルスレッドモデル。
UIはUIスレッドにあるからです。
別スレッドにあるViewをいじれるわけがありません。

もっと例えば、アメフト選手がボールをもって突っ走ってるときに
隣に走ってるやつもボールを持つ!
てなもんです。
もうカオス。

明日に続く。



0 件のコメント:

コメントを投稿