≒ Simple Kitchen timerの件

アプリ公開しました。
Simple Kitchen timer

開発で2週間、アイコンやスクショ作成、リリース前レポートの確認とかで3日掛かった。前のエントリで書いた通り、openGL処理部分は使いまわしなんで時間がかからなかったです。

今回ハマったのはタイマー処理。ほぼイディオムな次のようなコードなんだけど、

[code language=”java”]
Timer timer = null;
@Override
public boolean onDoubleTap(MotionEvent e) {
if(timer == null){
timer = new Timer(true);
timer.scheduleAtFixedRate(new mTimertask(activity,timer),0,100);
}else if(timer != null){
timer.cancel();
timer.purge();
timer = null;
}
return false;
}
[/code]
(だいぶ簡略化してます)

他のクラスからタイマーをキャンセルしても死なない(nullにならない)。コンストラクタやメソッドの引数で渡してそれをキャンセルしても死なん。
ググりまくって結構同じハマり方してる人いるみたいなんだけど、結局タイマー定義を

[code language=”java”]
  static Timer timer = null;
[/code]

にしたら上手く動くようになった。我ながらまだJavaの理解が浅いんだよなー。
他にもタイマー処理の色んなところでハマりまくりながらようやく公開寸前までたどり着いて、まだ問題が残ってたのでググりまくってたら(コピペプログラマだからね)、何やらキッチンタイマーみたいなアプリに最適なGoogle様謹製のクラスがあるような話を散見した。
今さら処理のコア部分を書き直すのはつらすぎ、悲しすぎたのでそっち方面の検索はしないまま自前の複雑怪奇なタイマー処理のまま押し切った。勉強になりました。

良かったら使ってみてください。コードの複雑さにしては単純なアプリです。
…クラッシュレポート上がってきたら全部書き直そう…

追記:ワロタw

OpenGL や Unity3D のフレームワークに基づくアプリ テスト用自動クローラは、OpenGL や Unity3D を使用するアプリの UI 要素を識別できません。テスト結果は、アプリの起動と数秒後のアプリの終了のテストに限られます。