今よりもっとiOS5とiCloudを使いこなすための情報まとめ
iPhone無料iPhoneアプリまとめ完全版(2011秋版)
これまで作ったiOSアプリケーション
ツイートしてもいいですか? Follow @motomaka
2011年01月24日
■[Android][開発] 一日でAndroidのAppWidgetを作って公開出来るか試してみました
先週のある日のことです。私は、とても悩んでました。
というのも、今まで以下のような感じでAndroidのアプリを作ってきたわけです。
5日間で2つ目のAndroidアプリを作って公開してみました
3日間で初めてのAndroid AppWidgetを作って公開してみました
気が付いた方がいたかどうかは定かではありませんが、
途中から以下を意識し始めてました。
一週間=7日間、5日間、3日間、・・・
となると、次は・・・一日だよね?
てことになるわけですが、さすがにこれはハードルが高い。
なにせ、一日といっても24時間連続して使えることなど、
私の場合ほぼ無いに等しいのだから。
と、その時、心の中の自分の声が聞こえてきた。
出来るか出来ないか、じゃない!
やるかやらないか、だ!!!
ならば仕方ない、やってみるか!
という、無意味に人知れず週末チャレンジしてみた実録メモです。
(注意)
普通に考えたら全く意味のないことです。
くれぐれもご注意くださいm(_ _)m
まずスケジューリングを考える
やるなら、せめて何かを残したい・・・・
そういう場合、何よりも大事なのがスケジューリング。
ということで、まずスケジューリングを考えてみた。
これまでの経験から、最近の私は土曜日の朝は比較的時間に
余裕があることが判明している。もちろん、時と場合によるが。
なので、土曜日の朝から作り始めて次の日の朝にAndroidマーケットで公開し、
記事はその後ゆっくり書く、という風にすれば一番効率がいいはず、と考えた。
作るアプリのネタを考える
作るアプリのネタは事前に考えることにした。
当日は時間との戦いになることは避けられない。
なので、さすがにそこは勘弁して頂きたい。
まず、一日縛りの条件下で出来るとしたらAppWidgetしかないだろう。
前回の記事で書いたように少々(面白さに)ハマってるのかもしれないが。
なお、この時考えたネタは出来るか出来ないか、については考慮してない。
で、思い付いたネタが以下。
| アプリ案 | 備考 |
|---|---|
| 各種ステータス表示 | 日付とかバッテリー表示とか。 無難なのと、ちょっとやってみたい案が出来たから。 |
| ストップウォッチ | 定番のわりにそういうウィジェットってないような? |
| タイマー | ストップウォッチが出来たら簡単に出来そうな気が(ry |
| HTBPocket Widget | 案としてはいいけど、HTBPocket本体に組み込むべき? |
色々挙げておいて言うのもアレだが、案は出しすぎても良くない。
ちゃんと現実を見ることも必要だからだ。
この中で現実的に実現可能っぽいのは、やはりステータス表示だろう。
本記事の下書きはここまで。
実はここまでは先週末までに用意しておいた下書きである。
以下からは、チャレンジ当日のメモ。
さて、どうなることやら・・・
そしてチャレンジ当日早朝。AppWidgetを作り始めた
まず、ステータス表示ウィジェットを作ることにした。
無難に出来そうなこと、そして「DQT」というAppWidgetが
面白いなぁ、と思ったのが大きいと思う。
それならば私は・・・ということで作ったのが以下。
まず、最初はこんな風に取得した各種ステータスを表示。
表示しているのは以下の項目。
これは何を表示するか、非常に悩んだ・・・
| 左 | 右 |
|---|---|
| 月 | 日 |
| 時 | 分 |
| バッテリ残(%) | 温度(℃) |
| 閾値(MB) | 使用可能メモリ(MB) |
そして項目の位置を微調整します。XMLでの調整なので面倒くさい(^^;;
そして、適当に作ってた背景画像を目的のものに差し替えます。
もうお分かりですね、昔懐かしい画面っぽい感じにしてみた、
というわけです(^o^)
ちなみに参考にした記事は以下です。
現在の日付・時刻(年月日時分秒)を取得するには - 逆引きAndroid入門
バッテリーの情報(Battery information)を取得するには - 逆引きAndroid入門
システムのメモリ情報を取得するには(ActivityManager編) - 逆引きAndroid入門
Androidのタスク情報を取得する(ActivityManager) - Tech Booster
このアプリは作業開始からここまでで、約2時間。
本格的なテストはまだだが、それは今でなくても出来る。
貴重な朝の時間を無駄にしてはならない!!
てことで、別のネタにチャレンジすることにした。
次にチャレンジしたのはストップウォッチ。
まずはこんなものを作って動きを確認した。
時間のテキスト部分をタップすると開始、
もう一度タップすると停止、更にタップすると初期化、
そしてまた開始、という動きをする。
その後、適当な背景画像をセットして位置調整をした。
参考にしたのは以下です。
このストップウォッチAppWidgetはここまでで1時間くらいだった。
ここでちょっと気になることもあったけど、
急遽思いついたネタを実装してみるべく、別のAppWidgetを作ることに。
それが以下。
よくある、丁度いいタイミングでタップする、というミニゲームである。
タップするとゲーム開始。以下の表示になる。
上に表示されている秒数に合わせてタップすると・・・
秒数が表示されて結果へのコメントが表示される、
というシンプルな内容である。
ちなみに、この秒数はランダムで変化するので
シンプルでありつつも単調さは少し軽減している。
このAppWidgetは約2時間だった。
事前にストップウォッチウィジェットを作ってたので
ゲームとしての動き部分だけ見直せばよかったので楽だった。
この時点で朝ご飯を作る時間が迫っていたので、一休みすることに。
この3つのAppWidgetの本格的なテストはこれからだけど、
それは引き続き、合間を見て行うことにした。
スマートフォンはどこでも持ち歩けて試験も出来るので
こういう時も本当に便利である。
テストをしていて気付いた問題点
朝食後、週末にありがちなもろもろの合間でテストをしていた。
所々修正すべき点はあるものの、変な動きをすることもなく、
順調にテスト出来ていた。
ちなみにAppWidgetの場合、どんな点に重点をおいて
テストしたのかを書いておくと、こんな感じ。
・AppWidgetの動作パターンの網羅、確認
・通常表示時のAppWidgetの追加、削除
・何か動作している時のAppWidgetの削除
・AppWidget削除時のサービス停止確認
・AppWidget追加時のプロセス動作確認
まだAppWidgetを知ってから日も浅いこともあって、
これくらいしか思いついてない。書き漏らしもあるかも。
もっと注視すべき点もあるかと思われるので、
そういう点はご指摘頂けると有り難いですm(_ _)m
さて、本題に戻ろう。
今回3つのAppWidgetを作ってテストをしていて気になった点。
それが、上記のテスト項目で最後に挙げた項目、
「AppWidgetのプロセス動作」である。
具体的には、ストップウォッチ、ミニゲームが問題だった。
ストップウォッチの動作は、1/100秒周期でAlarmManagerを更新してて
その時間間隔で経過した秒数が変化する仕組みになっている。
なのでストップウォッチっぽく見えるのだが、動いている時はいい。
問題は、動いてない時。
AlarmManagerを使ってるため、動いてない時も1/100秒周期で更新されており、
CPU使用率が4〜5%くらい消費されていた。
これはマズい!
と思い、見直しを行うことにしたが、これが結構やっかいだった。
見直し案の検討と実施
言葉では説明が難しいので、図にしてみた。
まず、元のAppWidgetの構成、動作の仕組みはこんなイメージ。
1/100秒周期でサービスを始動しているので
CPU負荷が高くなってしまっている。
修正案としては以下の図のようになる。
サービスもアラームも、一定周期で動いてなければならないし、
いつクリックされるかも分からないので、数秒間隔で始動せざるを得ない。
試しに数秒間隔にしてみたら、CPUの負荷が0〜1%程度にまで
軽減されることも確認出来ていた。
ただ問題なのは、ストップウォッチとして動作させるなら
1/100秒周期で動かさないとそれっぽい動きには見えない。
なので、動いている時は1/100秒周期、動いてない時は数秒周期、
という風に、動的に周期を変更させてやるのがベストだった。
その時に更に問題だったのが、AppWidget側からサービス内の挙動を
知ることが出来ない、というか、その方法が分からなかった・・・ということ。
(※これは私が分からなかっただけで、簡単に出来るのかもしれない)
で、仕方ないので以下のようなことをしてみた。
SharedPreferencesを用いてサービス側の状態を保存しつつ、
AppWidgetからその内容を参照してAlarmManagerの周期を変更してみた。
これで、サービスが動いている時と動いてない時の動作周期を
制御することが出来るようになった。
ただ・・・・出来るようになったのはいいんだけど、
動きだしのところで、どうしても引っかかったような動きになる。
動いてない時の周期を短くすればそれも改善されるけど、
それだとCPU負荷は上がる、という、後先立たない状態になって
満足な内容とは到底言えない状態になってしまった・・・
ここで少しだけ感じたのは、ひょっとして
根本的な何かを見落としてるのでは?ということ。
何かが違う、という、説明のつかない感覚だけど、
AppWidgetでこういう動きをするものは、そもそも不適切なのかも?
という、そんな思いなのかもしれない。
今回作ったAppWidgetの公開
話が少々長くなりました。
ということで、結果的に以下の1つのAppWidgetを昨日から公開しています。
| FFS | 昔懐かしい雰囲気で 各種ステータスを表示するAppWidget | 無料 |
少々確認したいことがあったのと、本記事的な成果として何か欲しい、
ということもあって、1つだけにしました。
他のAppWidgetについても「使ってみたい」というご要望があれば、
公開について検討してみたいとは思ってます。
1日でAppWidgetを作って公開してみた感想
簡単だと思ってたAppWidgetだけど、アプリ開発には違いないので
やはり色々と大変なことはあるなぁ、というのが分かりました。
奥が深いというか何と言うか・・・・。
今回問題と感じた点について解消出来る上手い方法を思いつくか、
どこかで見つからない限りは少々苦しいこともあるので
AppWidgetについては小休止して、次に作るのは普通の
Androidアプリにしようかな、と思った次第。
というか、そろそろiPhoneアプリの方も再開したいし、とか、
やりたいことが増えるばかりで困ってしまいますね・・・・
ということで半ば強引に思いついてやってた、
「Androidアプリ作ってみたよ」シリーズはひとまず終了です。
色々と勉強になった!












