2011年9月20日火曜日

やっぱりヘンだ、Service

少し前のエントリーで、Serviceの強制終了について、書いてみました。

しかし、それでも、やっぱりよく終了させられてる・・・

Serviceをバックグラウンドで動かしてても、フォアグラウンドのブラウザで、重いページとか開くと、黙って止まります。
(startForeground()で設定した)Notification領域の表示も、無言で消えます。
前にソース調べたとき、LowMemory状態でもServiceをKillするようだったので、少し調べたら、こちらのページが。

落ちないServiceの作り方

想定通りというか、やはりServiceは、Killされる前提で設計・コーディングした方がよい、ということになりますorz
勝手にKillされるって、どーいうことよ・・・

まだ試してはいないんですが、一つの解決策として、状態を持たないようなServiceであれば、完全にイベントドリブンにして、何らかのイベント・呼び出しにおける処理が、それぞれ独立して、完結する形で作り込むこと。

もう一つは、状態を持つようなServiceであれば、状態と関連するデータを、Javaのシリアライズ機能で、都度ファイルシステムに保存する。そして次のイベント呼び出しごとにシリアライズしたデータを読み出して、処理を再開するとか。

そんな方法も採れるのかな、、、と思案中。あまりスマートじゃないけど。

Androidって、Javaで取っつきやすくて、サンプルコードもいっぱいあるので、作り出すのは簡単ですが、こういった特有の、怪しい動作がたくさんあって、品質あげたり検証していくのって、本当に、大変・・・。

良くも悪くも、クラウドが主体(というか、前提?)なPlatformのような気がしています。
クラウドなら、基本的にクラウドに対する要求と、その応答で、クライアント側はだいたい終わりですからね。

0 件のコメント:

コメントを投稿