●画面を消してもタイマーを動かし続ける


アプリを動かしている状態で電源ボタンを押して画面を消しても、また時間が経って自動的に画面が消えたとしても、 プログラム中のタイマーなどは生かしておきたい。
そんな時があると思います。

例えば、 onPause() での終了処理でタイマーを殺さずにいると、電源ボタンを押して画面を消してもタイマーは生きてますが、
戻るボタンやホームボタンを押すとプログラムが残念な結果になります。

こんな感じに。

といって、 onDestroy() の中でタイマーを殺そうとしても先にプロセスが殺されて残念な事になります。

そこで、終了時に必ず通る onPause() の中で画面の状態を調べて画面が明るい場合には終了処理を、
画面が暗い場合は電源ボタンを押されたと判断して、そのままタイマーを続行するようにしました。
また、起動時に必ず通る onResume() ではタイマーが複数登録されるのを防ぐようにしておきます。

private java.util.Timer timer = null;
private java.util.TimerTask timertask;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
    super.onResume();
    if(null == timer){
        timertask =new java.util.TimerTask(){
            @Override
            public void run() {
            }
        };
        //タイマーの起動
        timer=new java.util.Timer(true);
        timer.schedule(timertask,(long)1000,(long)500);
    }
}

@Override
protected void onPause() {
    super.onPause();
    android.content.Context context=getApplicationContext();
    android.os.PowerManager pm = (android.os.PowerManager) getSystemService(context.POWER_SERVICE);
    if(pm.isScreenOn()){
        //画面がONの場合はホームボタンや戻るボタンなどで終了した。
        timer.cancel();
        timer.purge();
        timer=null;
    }
}
このようにすることにより、プログラム実行中に画面の電源を落としてもタイマーが動き続けます。
たぶんですけどね。


▲トップページ > android