本文主要是介绍android休眠之后 定时任务TimerTask不生效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本人也是安卓菜鸟一枚,入行不久,公司需要实现一个功能: 就是没有连接电源,黑屏(休眠)之后倒计时20分钟之后让机器关机。当时我就觉得也不是很难,我再Luancher中
可以注册动态广播监测到黑屏的操作,然后加入一个判断标志看是否连接了电源,然后执行倒计时任务就ok了。谁知道休眠之后,居然计时任务不生效了。我弄了很久才发现。后来就百度啊,然后找到了wakeLock,把延迟任务放入wakeLock中就ok了。核心代码如下
1、PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LauncherActivity.class.getName());
wakeLock.acquire();
taskHandler.sendEmptyMessageDelayed(102, 20*6000);
因为在launcher中mianactivity中写的 在ondestory方法中wakeLock.release();释放掉了。
t说明:askHandler.sendEmptyMessageDelayed(102, 20*6000); 这个就是休眠之后它还会一直等到20分钟之后发送一个消息 我就是让让关机的 Handler代码如下:
2、 private Handler taskHandler=new Handler(){
@Override
public void dispatchMessage(Message msg) {
// TODO Auto-generated method stub
switch (msg.what) {
case 101:
// SDcardManager.WriteErrorLogToFile("execute shutdown");
// if(autoShutDownTimer==null){
// autoShutDownTimer=new Timer();
// autoShutDownTimer.schedule(autoShutdownTask,10000);
// }
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LauncherActivity.class.getName());
wakeLock.acquire();
taskHandler.sendEmptyMessageDelayed(102, 20*6000);
break;
case 102:
Shuntdown();
break;
default:
break;
}
}
};
/*
* 关机操作 这个方法 在 用户app中行不通
*/
public void Shuntdown()
{
Intent intent =new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
这篇关于android休眠之后 定时任务TimerTask不生效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!