Android のマルチタスク
Tuboroid の作者がマルチタスクについて書いてるのを見た。
こことここ。
#あっという間に En2ch が抜かれたからね。。;;
#凄い作者だから、気になって見てる。
でも、「スレッドを使ってない場合」、という一言が足らなくないかい?
バックグラウンドに回ったアクティビティは基本的に電池を食わない、は一応正しいけど、スレッドを使っているアクティビティの場合、スレッドそのものはバックグラウンドでも普通に動く。当然、普通に電池は食う。
もちろん、スレッドを使うアプリの作者は、できるだけ電池を食わないように作るので、基本的には食わないというのは正しいかもしれない。
でも、Android のマルチタスク・マルチスレッドを生かすアプリを考えると普通にスレッドを使う。
javaは言語仕様でスレッドを規定しているので、スレッド使うの簡単だし。
実際、先週リリースした拙作の CPUMonitorMini は、バックグラウンドでもスレッドは動いてる。<棒グラフを更新しているのは1つのスレッド。
ただのアクティヴィティなので、バックボタンを押すと死ぬけど、ホームボタンを押してバックグラウンドにまわせば、スレッドでずっと動いてる。
。。。と、CPUMonitorMini の宣伝をしたくて、久しぶりに blog を書いてみたのだった^^;
あと、アクティビティとサービスを分けて考えてるけど、GUI を持てるか持てないかだけで、たいして変わらない。
アクティビティでもサービスでも、裏で動かそうとしたら、自分でスレッドを作って回す必要がある。
サービスは GUI を持たないから、メモリ消費が少ない分、OS から殺されることも少ないとは思うが、実際は、平気で殺される。
一応、onLowMemory() が呼ばれるのが、アクティヴィティより先のことが多いので、そこで何かしら手を打って、殺されないようにすることは可能だけど、DevPhone とかメモリが少ない機種の場合、どうしても殺されてしまう。
なので、AlarmManager を使って、定期的に起こす必要がある。
でも、電源 On/Off やアプリのインストール・アップデートをすると、AlarmManager で設定した内容も全部消されて。。動けなくなる。。。;;
| 固定リンク
「Android」カテゴリの記事
- Essential Phone PH-1 のバッテリー交換(2021.12.11)
- sysbench をとってみた(2016.07.02)
- ListView の Height は WRAP_CONTENT を避けるべき(2015.12.23)
- Nexus 6 Android 6.0.1 (MMB29K) root化(2015.12.18)
- Nexus 6 Android 6.0.1 (MMB29K)(2015.12.17)
この記事へのコメントは終了しました。
コメント