2009-08-03
AndroidのappWidget作成時に行っておくべき消費電力対策についてのまとめ(その1)
先日記載したセンテンスばらばらの試行記録を消費電力対策の部分だけ整理しました。
今後も、何か見つけたらエントリ起こしていきたいと思います。
消費電力に対して影響を与えうる内容。
そのことによるメリット
- 実装が非常に楽。(onUpdateをオーバーライドして実装を記述するだけでよい)
そのことによって起こる現象とバッテリーへの影響
対策方法概要
- res/xml/*.xml側のandroid:updatePeriodMillisに値ゼロ[0]を指定し、システムからのonUpdate呼び出しを停止する。
- AppWidgetProvider.onUpdateの呼び出しをAppWidgetProvideronReceive側から呼び出し行うように処理を変更する
- onUpdate内にAlermManagerを作成して、指定時間で自分自身にintentを投げるように設定する。*1
- この際、投げるintentには必ず、ウィジェットIDを添付する。
PublicMethodsの呼ばれ方比較
android:updatePeriodMillisに0以外の値を定義した場合の動き
android:updatePeriodMillisに0を定義した場合の動き
- Widget配置時
- onEnabled => onReceive
- updatePeriodMillis周期時
- 0指定のため、イベント起動がなし
- Widget解除時
- onDisabled => onDeleted
実装時注意点
- SowftwareUpdate、最初の画面へのアクティブ化等の際、onUpdateは必ず1回呼ばれるので、起動、初期化等は常にここで行えばよい。
- AlermManaerは電源OFF、アプリケーションのバージョンUp/アンインストール時などに内容が消える。影響があるのは電源OFFだけなので、Intent.ACTION_BOOT_COMPLETEDに対する対応も必要。*2
- appWidgetProviderへの通知をAlarmManagerで行う場合、
- PendingIntentを用いてIntentを設定する必要がある。
- PendingIntentへAppWidgetProider向けのIntentを定義するためのメソッドはgetBroadcastである。
- AlermManaerを定義する場合、引数としてAlarmManager.ELAPSED_REALTIMEまたはAlarmManager.RTCを指定する必要がある。*3
- AppWidgetProvider.onReceiveからAppWidgetProvider.onUpdateを起動する場合、投げるIntentにウィジェットIDを付ける必要あり
- ウィジェットIDは最初のonUpdateの最初の呼び出し時に第3引数として入ってくる物から得る。この値のUri化は下記の通り
- onReceive(Context context,Intent intent)からonUpdateを起動する場合、onUpdate(context, AppWidgetManager.getInstance(context), ウィジェットIDを配列化した値)で行える。
思いついたのはこのくらいかな〜。
コメントを書く
leibun
2010/04/06 08:31
onReceive(Context context,Intent intent)からonUpdateを起動するということは、super.onReceive()を呼ばないってことですかね。それだとonDeleted()とかも呼ばれなくなるのでその対処もしないとまずいのでは...
トラックバック - http://d.hatena.ne.jp/TAKAOMAYA/20090803/1249303524
リンク元
- 69 http://www29.atwiki.jp/android/
- 16 http://www40.atwiki.jp/ht03a2ch/pages/13.html
- 11 http://www29.atwiki.jp/android
- 8 http://jp.androlib.com/android.application.jp-djfactory-minutes_widget-jCnn.aspx
- 6 http://www.google.co.jp/reader/view/
- 5 http://b.hatena.ne.jp/keyword/Android
- 5 http://hatsunemiku.blog107.fc2.com/
- 5 http://www29.atwiki.jp/android/pages/1.html
- 4 http://reader.livedoor.com/reader/
- 4 http://www29.atwiki.jp/android/pages/79.html