ウィジェットのプロセスの再起動について

688 views
Skip to first unread message

斉藤

unread,
Mar 1, 2014, 6:49:14 AM3/1/14
to android-g...@googlegroups.com
お世話になります、斉藤と申します。

現在、拙い知識の中でとあるウィジェットアプリを作成しております。
1つのウィジェットのクリックで開く設定画面と、常時起動の1つのサービスを持ち、
指定された時間が経過したらサービスの結果に応じて表示を更新するウィジェットです。
動き自体は完成しているのですが、設定画面を開き、
その設定画面をキルした場合にウィジェットの更新が止まってしまいます。
アプリの一覧から起動状態を見ると、
更新されるときは「1個のプロセスと1個のサービス」となり、
更新されないときは「0個のプロセスと1個のサービス」となります。
0個のプロセス起動状態から1個のプロセス起動状態に戻してやるにはどうしたらよいでしょうか。

キル方法はアプリの履歴ボタン(ホームキーの右)から左右にひょいっと消してやるあれです。

以上、乱筆で失礼ながらよろしくお願いいたします。

Makoto Yamazaki

unread,
Mar 2, 2014, 12:41:47 AM3/2/14
to android-g...@googlegroups.com
zaki です。

App widget に関係なく、どうやら 4.4 からRecent Apps からスワイプでアプリを
消した時の挙動が変わっている(もしくはバグが有る)ようです。

サービスの onStartCommand の返り値で START_STICKY を返している場合、
4.3 の端末までは数秒でサービスが再起動されます。しかし 4.4 以降ではなぜか
再起動されません。

ベストな方法かどうかはわかりませんが、スワイプで消される際に
Service#onTaskRemoved(Intent) が呼ばれるので、このメソッドをオーバライド
して数秒後にサービスを起動するようなタイマーをAlarmManager でセット
しておけばサービスを再開することはできています。




--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには、android-group-j...@googlegroups.com までメールを送信してください。
このグループに投稿するには、android-g...@googlegroups.com までメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
YAMAZAKI Makoto

斉藤

unread,
Mar 2, 2014, 11:31:16 AM3/2/14
to android-g...@googlegroups.com
斉藤です。お世話になっております。

本件、ビルドターゲットを10で実装しているのですが、Service#onTaskRemoved(Intent)は
ターゲット14からのようでした。
こちらも最善とは言いがたいかと思いますが、
AppWidgetProvider#onReceive(Context, Intent)にてACTION_USER_PRESENTを回収して
サービスを再起動するように致しました。
が、ロックスクリーンを変更するようなアプリを入れているとACTION_USER_PRESENTが
発行されないようで、対策としては不十分のようです。

悩ましいところですが、ありがたい回答をいただきまして、ありがとうございました。


2014年3月2日日曜日 14時41分47秒 UTC+9 zaki:
zaki です。

App widget に関係なく、どうやら 4.4 からRecent Apps からスワイプでアプリを
消した時の挙動が変わっている(もしくはバグが有る)ようです。

サービスの onStartCommand の返り値で START_STICKY を返している場合、
4.3 の端末までは数秒でサービスが再起動されます。しかし 4.4 以降ではなぜか
再起動されません。

ベストな方法かどうかはわかりませんが、スワイプで消される際に
Service#onTaskRemoved(Intent) が呼ばれるので、このメソッドをオーバライド
して数秒後にサービスを起動するようなタイマーをAlarmManager でセット
しておけばサービスを再開することはできています。
--
YAMAZAKI Makoto
Reply all
Reply to author
Forward
0 new messages