【发布时间】:2014-01-21 09:04:20
【问题描述】:
我正在从 AlarmManager onReceive 调用服务,下面是实现。我想知道这种唤醒锁的实现是否可以满足我的需求?
这是我的服务类中的 onStart 函数:
@Override
public void onStart(Intent intent, int startId) {
WakeLock wakeLock = null;
try{
PowerManager mgr = (PowerManager)getApplicationContext()
.getSystemService(Context.POWER_SERVICE);
wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
wakeLock.acquire();
//For time consuming an long tasks you can launch a new thread here
Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show();
}catch(Exception e){
}finally{
wakeLock.release();
}
}
【问题讨论】:
-
你真的试过了吗?如果是这样,它有效吗?你没有解释任何关于你的服务是如何工作的、它是做什么的或者你的“需要”是什么的。在 API 5 中还弃用了
onStart(...)- 您应该使用onStartCommand(...)。 -
是的,我已经尝试过了,这就是为什么我在这里发布它以了解我是否遗漏了什么,这在正常情况下有效,但发布的主要原因是了解它在其他情况下的执行情况'正常'的。
-
就像你指出的弃用 :) 我已经将代码隔离到第二个项目中,以检查功能,现在 thge 服务只显示一条 toast 消息,但在实际程序中它将被实现为做一些我打算在后台线程中进行的大型数据库操作,在这种情况下我也想知道我是否可以使用异步任务并取消 postExecute 中的唤醒锁?
-
你最终可能需要一个空检查——也不要捕获异常,它被认为是错误的样式——捕获抛出的特定异常
标签: android android-service android-alarms android-wake-lock