Androidプログラミング質問スレ Part14
■ このスレッドは過去ログ倉庫に格納されています
0166デフォルトの名無しさん
2011/11/02(水) 21:16:01.04BIND_AUTO_CREATEが意味するのは「bindが全て切れたらserviceを止める」だ。
ところがAppWidgetのライフサイクルはとても短いので、すぐに止まってしまう。
よってBIND_AUTO_CREATEは使ってはいけない。自前でstartServiceしろ。
でまあ、AppWidgetのライフサイクルはとても短いのは変わらないので
ServiceConnectionのイベントからbindしようとしても、
その頃にはAppWidgetのインスタンス自体が存在しない状態になってる。
対策はいくつかあるが、一番手っ取り早い方法では
同じアプリのコンポーネントは、デフォルトでは同じプロセスで動くというのを利用する。
Serviceのインスタンスをどこかのstatic変数から参照できるようにしておいて、
AppWidgetのイベント内部から参照できる。
他にはstartServiceのExtraにコマンドを入れてServiceを制御したりする手もある。
Serviceは基本的に1つしか起動されないが、startServiceで渡されたIntentを何度でも受け取れる。
逆にServiceからAppWidgetへの通知は、ブロードキャストインテントを使うなりContentProviderを使うなり単にファイルを経由するなりできる。
■ このスレッドは過去ログ倉庫に格納されています