« 2010年2月 | トップページ | 2010年5月 »

2010年4月の2件の記事

2010.04.19

Android のマルチタスク(2)

つっこみを頂いた^^;
Activityとマルチスレッド(oops)

確かに、Acitivity で作った Thread は onPause() で落とすべきで、裏で動かしたいなら Service にすべきですね。
CPUMonitorMiniは、既に Service に変えてます。

でも、デフォルトのブラウザとか、裏に回してもダウンロードは続けるよね。
それがマルチタスクの良さだし。
ネットーク系はどうしてもスレッドでやるのが楽だしね。
センサーロガー系のアプリや、ネットワークトラフィック監視系のアプリとかも、Service 作らず Thread でやっちゃってるのがあったはず。

Service が殺される件は、1.6 以前だけかもしれないですね。
ぐぐると、落ちないServiceの作り方(GrandNature)とかが出てきます。
2.0 になったときに、Service 周りに問題があったのでAPIを変えたとか無くしたとか、というのがあったはずなので、事情は変わってるのかもしれないけど。。。

(←フリーソフトを作るモチベーションアップのために、ぜひ。)

| | コメント (0) | トラックバック (0)

2010.04.17

Android のマルチタスク

Tuboroid の作者がマルチタスクについて書いてるのを見た。
ここここ
#あっという間に En2ch が抜かれたからね。。;;
#凄い作者だから、気になって見てる。

でも、「スレッドを使ってない場合」、という一言が足らなくないかい?

バックグラウンドに回ったアクティビティは基本的に電池を食わない、は一応正しいけど、スレッドを使っているアクティビティの場合、スレッドそのものはバックグラウンドでも普通に動く。当然、普通に電池は食う。
もちろん、スレッドを使うアプリの作者は、できるだけ電池を食わないように作るので、基本的には食わないというのは正しいかもしれない。
でも、Android のマルチタスク・マルチスレッドを生かすアプリを考えると普通にスレッドを使う。
javaは言語仕様でスレッドを規定しているので、スレッド使うの簡単だし。

実際、先週リリースした拙作の CPUMonitorMini は、バックグラウンドでもスレッドは動いてる。<棒グラフを更新しているのは1つのスレッド。
ただのアクティヴィティなので、バックボタンを押すと死ぬけど、ホームボタンを押してバックグラウンドにまわせば、スレッドでずっと動いてる。

。。。と、CPUMonitorMini の宣伝をしたくて、久しぶりに blog を書いてみたのだった^^;

あと、アクティビティとサービスを分けて考えてるけど、GUI を持てるか持てないかだけで、たいして変わらない。
アクティビティでもサービスでも、裏で動かそうとしたら、自分でスレッドを作って回す必要がある。
サービスは GUI を持たないから、メモリ消費が少ない分、OS から殺されることも少ないとは思うが、実際は、平気で殺される。
一応、onLowMemory() が呼ばれるのが、アクティヴィティより先のことが多いので、そこで何かしら手を打って、殺されないようにすることは可能だけど、DevPhone とかメモリが少ない機種の場合、どうしても殺されてしまう。
なので、AlarmManager を使って、定期的に起こす必要がある。
でも、電源 On/Off やアプリのインストール・アップデートをすると、AlarmManager で設定した内容も全部消されて。。動けなくなる。。。;;

(←フリーソフトを作るモチベーションアップのために、ぜひ。)

| | コメント (0) | トラックバック (1)

« 2010年2月 | トップページ | 2010年5月 »