通常のAndroid端末は一定時間経過するとモニター・CPUがオフになります.
ファイルのダウンロードのような時間が掛かる処理を行っていた場合、予期せぬ状態で処理が止まってしまう可能性があります.
そこで、これに対応する実装方法を紹介します.
1.CPUをオンにしておきたい場合.
WAKE_LOCKを取得します.
1 2 3 4 5 6 7 |
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TagToDistinguish"); wl.acquire(); // 時間の掛かる処理 wl.release(); |
必ず、忘れずにreleaseを呼んでください.これを呼ばないと、バッテリーの消耗が著しく激しくなります.
WAKE_LOCKはこのような危険性があるため、パーミッションが必要です.
1 |
<uses-permission android:name="android.permission.WAKE_LOCK" /> |
このエントリを読まれている方は、ほぼほぼこちらのケースかと思いますが、2.の場合に当てはまるか念のため確認してください.
2.の実装であれば、処理の危険性なく、パーミッションも不要となります.
2. 画面のみをオンにしておきたい場合
ユーザが電源ボタンを押した場合には処理が停止してもいい場合は、以下の実装で画面をオンにしておくことができます.
1 2 3 4 5 6 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Acitvityの処理 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } |
また、LayoutのXMLへの属性追加でも同様の 効果が得られます.
1 |
android:keepScreenOn="true" |
より詳細な情報については、公式ドキュメントのKeeping the Device Aliveに記載があります.