AppNext Press 

アンドロイドアプリ開発をしているAppNextによるAndroidアプリ開発・リリース情報をお届けします。 ツイッターもやっています。ぜひフォローしてください♪ 【@AppNextJP】

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

祝『スマートバッテリー』公開♪ & Timerに泣かされる事件

最新アプリ『スマートバッテリー』を無事公開することができました!

前作『バッテリーサポート』に続いてのスマホ節電アプリとなりますが、今回は主に通信の制御に焦点を絞った節電アプリとなります。非常にシンプルでわかりやすいアプリとなっていますのでぜひダウンロードしてお試しください♪


ここでちょっとした開発裏話。
今回のアプリ開発で一番苦労したことはTimerの扱いについてでした。

通信を定期的に復旧させたり停止させたりする処理にこのTimerを使ったのですが、IllegalStateExceptionが発生してしまい、Timerのタスクがキャンセルされ、アプリが正しく動作してくれなかったのでした。


はじめてお目にかかったこのIllegalStateExceptionなるものの対処法を調べていたら解決法が見つかりました。

参考サイト 『Javaトラブルシューティング』


このサイトの<Q11-4>にその解決法が載っていました。それによると、

① runメソッド内の例外処理対策をする

② schedule()を呼び出す箇所でIllegalStateExceptionをキャッチし、Timerを再生成するようにする

とのことでした。


自分の書いたコードを見てみると①に関してはしっかりやっているので問題なし。そして②をコードに追加してみたところバッチリ上手くいきました。実際のコードは以下のとおりです。






try {

mTimer.schedule(tt, firstTime.getTime(), 1); // ほぼ0秒間隔でタスクを実行する

} catch (IllegalStateException e) {
// TODO: handle exception

mTimer = new Timer(); // Timerを再生成する

mRegularTask.start(mTimespan); // TimerTaskを再スタートする

}




Timerはなにかと便利なのでぜひぜひマスターしておきたいですね♪


※追記

TimerのIllegalStateExceptionについてより正確なことがわかったので補足します。

上記のコーディングで上手く動作はします。ですがLogで確認したところ、IllegalStateExceptionそのものの発生を抑えているわけではないようです。
最初にscheduleメソッドを設定したTimerはやはりキャンセルされてしまいますが、catch部分で再生成したTimerがしっかりスケジュールをこなしてくれて上手くいく! みたいなことのようです。参考までに。


Twitterボタン
Twitterブログパーツ

スポンサーサイト

PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。