WakeLock での開放について

1,096 views
Skip to first unread message

oreore

unread,
Feb 13, 2012, 6:26:06 AM2/13/12
to 日本Androidの会
oreoreです。androidを始めたばかりです。
このアプリは加速度センサーを利用する
アプリです。
android2.2、
WakeLockで SCREEN_DIM_WAKE_LOCKを取得し、
onPause()で、.release();
しております。

携帯を放置すると、薄暗くなり、スリープしないで実行出来ますので
取得はできていると思います。
しかし、ホームボタンでアプリを
終了?した後、スリープして
くれません。


KeyguardManager keyguardの.disableKeyguard();なども
試みましたが、だめでした。

どうすればいいのかどなたかご教示下さい。

oreore

unread,
Feb 14, 2012, 7:09:49 PM2/14/12
to 日本Androidの会
oreoreです。自己レスです。
ちょと投稿のようになった経過を。
まず最初、バックキーで強制終了が起こるようになり、
その処置として、バックキーが利用出来ないようにしました。

ホームキーをクリックすることで、
アプリが終了していると思っていました。が、どうもそうなっていない。

それは、携帯を再起動して、開発アプリを起動しないときは
スリープする。
という動作から上記のように判断しました。

以下の解決方法があるかと思います。
①ホームキーで、アプリを終了させる。
②バックキーで強制終了しないようにする。

②の場合、センサーリスナーを利用している
Activityページで強制終了しているようです。
②がベストかと思いますけど。

①で対処するのが簡単かなと思いますが。。。
どのようにすればいいのでしょうか?

その場合、onPause()で WakeLockをリリース
していますが、リリースするのか?
といった課題が出てくる。

どなたか、
参考にできるサイトなどご教示いただけないでしょうか。

noxi

unread,
Feb 14, 2012, 7:30:00 PM2/14/12
to android-g...@googlegroups.com
noxiです。

バックキーは最終的にActivityのfinishメソッドをコールしアプリが終了しますが
ホームキーはバックグランドに移行するだけでアプリは終了しません。
(Windowsで言うと終了ボタンを押すか最小化ボタンを押すか、的な)

Activityのライフサイクルをきちんと勉強された方が良いと思います。
ホームキーのキーアクションをアプリから取ることはほぼ不可能ですので
http://y-anz-m.blogspot.com/2010/10/androidhome.html
この辺参考にして適切なライフサイクルイベントを書き換えていく他はありません。


ちなみに以前某栽培アプリで見かけた問題ですが
バックキーでアプリが終了しないのはユーザーにとって大変なストレスです。
よほどの事情が無い限り避けた方が良いでしょう。


2012年2月15日9:09 oreore <raku...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

Mickey.S

unread,
Feb 14, 2012, 7:47:31 PM2/14/12
to android-g...@googlegroups.com
oreoreさん、こんにちは
mickeyです。

解決策ではないです。

まず、バックキーで強制終了しないようにした方がいいと思います。
アプリが強制終了するということは、ほとんどの場合自分のアプリにバグがあるということです。
このバグが、WackLockを解放できていない問題に関連している可能性もあります。

アプリが強制終了した時は、adbログに情報が出力されますので、adbログを見ると良いです。

WakeLockの取得/解放については、取得しているところと解放しているところにログを
入れてみると良いと思います。
取得したログと解放したログの数を比べれば、
onPause()のWakeLockのreleaseが呼ばれているのか、呼ばれていないのか明確になります。

以上、参考になれば幸いです。

oreore

unread,
Feb 14, 2012, 9:37:09 PM2/14/12
to 日本Androidの会
noxiさん、mickeyさん
ありがとうございます。
バックキーを使う方向で
対処出来ました。
LogCat
のエラーを見て、
どうもパミッションが怪しい。
で、
PERSISTENT_ACTIVITY
をして見たところ、
一応バックキーが利用できるようになりました。
が、
onPause()でreleaseエラー。
仕方なく、onDestroy()でreleaseした所
バックキーで
ランチャページまで戻り
無事、スリープ出来ました。

とりあえず、解決出来ました。
ありがとうございました。

oreore

oreore

unread,
Feb 14, 2012, 9:53:02 PM2/14/12
to 日本Androidの会
自己レスですみません。忘れていました。
参照サイトです。

http://techbooster.jpn.org/andriod/environment/6809/

http://d.hatena.ne.jp/Raspberry-Farad/20090506/1241543695

以上、ありがとうございました。

Mickey.S

unread,
Feb 14, 2012, 10:11:28 PM2/14/12
to android-g...@googlegroups.com
mickeyです。

バックキーで強制終了しなくなって良かったですね。
ただ、ちょっと気になったことがあるので投稿します。

ホームキーでホームに戻ったとき(つまり、oreoreさんのアプリがバックグラウンドにまわったとき)に、
スリープしない問題は解決したのでしょうか?

onDestroy()はホームキーを押したときは呼ばれないと思うので、WakeLockがreleaseされないような・・・
ソースコード見てないので、推測です。
ホームキーでホームに戻った時に、onDestroy()以外でWakeLockをreleaseしていれば
問題ないと思います。
Reply all
Reply to author
Forward
0 new messages