Translate

BTemplates.com

Powered by Blogger.

2017年9月8日金曜日

2017-09-07 到達点メモ


なんか動かないので見直してみたら使っていない変数を呼び出していたりしていた。
今回やっていて一番てこずったミスはこれ

    public int getTimerSec() {
        timerSec = (min10place *60*10 + min1place *60* + sec10place*10 + sec1place);
        return timerSec;
    }

これは各桁の分と秒を纏めて秒に変換する処理をやっているのだが、
上記のコードのままだと例えば9分39秒を579秒に変換するはずが
何故か、最終的に返される値が16209秒になっていた。
色々調べて気が付いたのだが、わかる人はいるだろうか?
*ヒント。元々は各桁の分と秒を纏めてミリ秒に変換するの処理だった。

     public int getTimerSec() {
        timerSec = (min10place *60*10 + min1place *60* + sec10place*10 + sec1place);
        return timerSec;
    }

上記の赤文字の部分が余計でした。
*1000していた処理で*の部分を消し忘れてたみたいです。

肝心のディープスリープの状態でHandlerがどれくらい動くのかを調べてみたのですが
ディープスリープが働いている状態でもHandlerは動いているみたいなのですが
Android7.0だと30秒が5分30秒ぐらいの長さになってしまいます。
これだったら正直前の方がまだましである。

再度調べてみたが
wakeLockかAleramMangerのどちらかを使えしか出てこない。
ただ、やっぱりAleramMangerは前調べた通り
一秒単位の細かい更新を図るのには向いていないようである
Timerを使ってはどうかという案が出て入るのだが
これってどうなんだろうか?

参考サイト
[Android]AppWidgetProviderでAlarmManager#setRepeatingがリピートしない

今回は今あるのをもう一度書き直す気力がなかったのと
wakeLockを実装するのが簡単そうだったので
今回はこちらを採用。
*一応軽く調べた限りでは、jobschedulerを使うらしいが
どうもメインのアクティビティ以外ではhandlerを使うように見えた。
ただ、調査のみで動作検証はしていないので、メモだけは残しておく。

簡単なメモとして、
・wakeLockはおそらくメインのアクティビティで呼ばないといけない
・wakeLock.acquire()をしていない時にwakeLock.release()を呼び出してはいけない
・wakeLockは一度作るとrelease()しても使いまわせる。

参考サイト
WakeLockを試す

今回使ったフラグ値は、PARTIAL_WAKE_LOCKで、スクリーンもキーボードも両方オフにするのですが、CPUは動いているので今回のDeepSleepを避ける際用途に使うことができました。
あと、今回は使わなかったので深くは気にしなかったのですが
PARTIAL_WAKE_LOCK以外にもフラグ値があと三種類あるのですが
どれもAPI17か13で廃止されているようです。
その割にはAndroid7.0で何故かFULL_WAKE_LOCKが使えた。

参考サイト
公式ドキュメント-PowerManager
公式ドキュメント-PARTIAL_WAKE_LOCK
公式ドキュメント-FULL_WAKE_LOCK
公式ドキュメント-SCREEN_DIM_WAKE_LOCK
公式ドキュメント-SCREEN_BRIGHT_WAKE_LOCK

無事アプリの更新もできたので。今日はここまで。



0 コメント:

コメントを投稿