iPhoneOS4.0がマルチタスクになるらしいのでAndroidのマルチタスクの話をしてみる(1)

まあ俺は一応iPhoneオーナーではありますが、ほぼ全くと言っていいほど使っておらず、またiPhone開発者ではないのでiPhone開発者の心境なんて知る由もないですし、iPhone開発者になる気も無いし(でも仕事上やむを得ないなら何だって書くけどね)、iPhoneOS4.0ベータ版にも触れてないから詳細は知らないけど(そして今のところ触る気もないけど)、とりあえず雑感。
その前に巷で恐ろしく誤解の多そうなAndroidのマルチタスクの初歩の初歩的な話からします。
メモリをどうやって節約してるとかそういう話はあるのだけど、そもそもそれ以前の人があまりに多く見受けられる(というか酷いことにジョブスも勘違いしているようにしか見えない)ため、物凄く初歩的な話をします。
なるべく非プログラマのどちらかというとiPhoneユーザ向けのつもり。そのレベルの人があまりに多く勘違いしているので。


■Androidではバックグラウンドに回ったアプリが動作し続けて電池を食う説
Androidではいわゆる画面を表示して入力を受け付けているプログラムの部分(=ユーザから見て「アプリ」に見える部分)をアクティビティ(Activity)言います。
アクティビティは、バックグラウンドに回るとポーズ状態という停止状態に入り、次にフォアグランドになるまで処理が止まります。
このため、バックグラウンドに回ったアクティビティは基本的に電池を食いません。メモリは食いますが、メモリ上にプロセスがあるだけでは電池は食いません。
■Androidではタスクマネージャが必須である説
Androidではタスクマネージャは「不要」です。
上で述べたアクティビティはバックグラウンドに回った時、処理は止まりますが、メモリにはまだ残っています(このおかげでタスク切り替えが短時間で出来るわけですね)
では他にアプリを立ち上げ続けていってメモリが足りなくなったらどうするのでしょうか。タスクマネージャを使って要らないアプリを終了させる必要があるんじゃないでしょうか。
必要ないです。
単に「一番使われていないアプリ(一番昔に使われたアプリ)」が勝手に終了されてメモリが空けられます。ただし終了の前に「次の再起動時に状態を元に戻すのに必要な情報を書き出してね」という処理が走って、その状態情報が保存されます。
もし勝手に終了されてしまったアプリへの切り替えが要求された時は、アプリが起動されさっき保存した状態情報を使って復帰させる処理が走ります。この時のタスク切り替えは少し時間が掛かることになります。
アプリを終了させる処理は極めて高速(というか一瞬)で行えるような作りになっていますので、裏で密かにアプリが抹殺されていても見た目では分かりません。次にそのアプリに切り替えた時に「あれ、切り替えちょっと遅いな?」と気づく程度です。
タスクマネージャが人気アプリなのは、万が一アプリが暴走した時に強制終了できるようにとか、なんかプロセスが一杯あると気持ち悪いとか、そういう精神衛生的な面が大きいです。ぶっちゃけると、俺は自分の端末にタスクマネージャは入れてません。
■でもバックグラウンドが増えるともっさりするんでしょ説
というわけで上記のごとく、バックグラウンドに回ったタスクが増えたことにより、フォアグラウンドタスクが「もっさり」することはありません。
遅くなる可能性があるのはあくまで「大昔に使ったアプリへの切り替え」です。
これが体感出来るのは「ホーム画面にずっと戻らなかったために”ホーム”(=ランチャ)アプリが終了された」ケースですかね。ホームは割と起動が遅いアプリですので。
まあそれでも通常は、タスクマネージャをぽちぽちいじり続けるよりも、ホームが終了させられちゃった時だけ諦めて待った方が時間は節約できますよ。
(まあ、ホームなんかどれだけ長時間使わなくてもまた戻る可能性高いんだからなるべく終了しないでくれよ、という話はありますが)
■でもバックグラウンドで処理してるやん?
Androidでバックグラウンドで処理しているのはサービス(Service)というアクティビティとは別の機構です。
サービスはバックグラウンドでも処理が行えます。例えばTuboroidの更新チェッカなどはサービスです。
ただしずっと処理が常駐しているのかというとそうではなくて、Androidには標準でアラームサービスというものが存在するので、こいつに「○時○分にこの処理を起動してね」と登録しています。
■で、iPhoneOS4.0のマルチタスクってどうなの
発表されている分の話だけで見ると、Androidのマルチタスク機構に非常に近いという印象を受けました。
Fast App Switchingはアクティビティそのものですよね。AndroidではHomeボタン長押しでアレが出る。ただ、バックグラウンドに回ったアプリは、(Androidのように)次の起動に備えて取り置きされるのか、状態情報だけ保存して一発終了される(この場合は切り替え時に時間がかかる)のか、分からないです。普通に考えたらAndroidと同じような前者の機構にすると思います。
それ以外のMultitaskingに挙げられていた機能はAndroidのサービスに近い感じです。ただしAndroidは開発者が自由にサービスを作れるのに対して、iPhoneではお仕着せのものだけが使える、といったところかと。
正直なところ、ジョブスが何故他社と比べてiPhoneOS4.0が電池消費を抑えられると考えているのかは分からなかったです。
もちろん(電池を食いやすい)サービスの使用が制限されていることで暴走するサービスを抑止できるという考えはあるかもしれないけど、むしろiPhoneアプリは審査するんだからAndroidよりもずっと開放しやすいはず。
例によって「開発者に自由を与えたくない病」が発病したのかなという邪推をしてしまうなぁ。
続き書いたよ
 Activityによる「切り替え」はほぼバッテリ的には「タダ」ですが、Serviceによる「バックグラウンド処理」はバッテリ的には「タダではない」です(これは恐らくiPhoneも同じ。AppSwitchingはタダだけどMultitaskingはバッテリ消費増を伴うはず)
 語弊があると良くないのでその辺書いておきました。
 http://www.narazaki.info/2010/04/android2.html
 AndroidであれiPhoneであれ、作りの悪いサービスを持つアプリがあるとバッテリが持たなくなる可能性はあります。そのようなアプリを殺すためにタスクマネージャを使うことまでは否定しません。

“iPhoneOS4.0がマルチタスクになるらしいのでAndroidのマルチタスクの話をしてみる(1)” への9件の返信

  1. > Androidのマルチタスク機構に非常に近いという印象を受けました。
    同感です。メモリ管理技法からバックグラウンド機能へのディスパッチまで、ほぼ同一の手法でしょう。iPhone における service の数(カテゴリは7つと言ってましたが)は気になりますが。

  2. Androidのマルチタスクの話をしてみる(2)

    あくまでAndroid開発者ではない、iPhoneユーザとか非開発者向けの話です…

  3. > 正直なところ、ジョブスが何故他社と比べてiPhoneOS4.0が電池消費を抑えられると考えているのかは分からなかったです。
    開発者向け 4.0 SDK使って現行機種でいじると案の定、バッテリーめちゃ食ってるようです。次の機種発表会では「マルチタスクなのにバッテリーライフは今までと変わらず!(`・ω・´)キリッ」とJobsは言うのではないかと思っています。

  4. ほぼ同じなんですか、勉強になりました。
    でも、後ろに回ったソフトが休止状態になるのだったら
    なんでAndroid、というかXpediaの動作はあんなにノロノロカクカクしてるんでしょうか。

  5. Flash CS5はどうなる? 「iPhone OS 4 SDKの規約変更」に関する記事まとめ

    先日iPhone OS 4が発表されましたが、それと同時にiPhoneアプリを開発するための規約が変更され、その中には、今夜発表(日本時間で13日0時)…

  6. >B-CHANさん
    あ、それ先日読みました。
    Apple主観をベースにしている割にはまぁまぁ正しいことを書いてる方だとは思いますよ。Apple信者の方に読ませるには良い記事だと思います。Androidに関して言えば突っ込みどころは山ほどありますが。
    このネタで1個エントリ書こうかとも思ったんですが、同じことを何度も書くことになるのでどうしたものか……

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。