我的应用程序在模拟器上运行顺畅 - 一切都正常工作 - 但不在我的手机上。
在我的应用程序中,我同时使用每分钟刻度的countdownTimer
和警报管理器,如果手机处于睡眠状态,则应确保通知用户需要通知的任何内容。
一旦接收器接收到警报管理器的广播,我就会获得一个部分唤醒锁定5秒钟(甚至比需要的更多)。
我查了一下,wakelock.isHeld()
返回true
。我有必要的权限,onReceive
不会那个很长时间(它的计算成本并不高)。
然而,countdownTimer
没有赶上。在我真正解锁手机并查看应用程序之前,没有其他任何事情被解雇。
任何想法为什么?我不能为我的生活把这一点弄清楚。
编辑:尝试将wakelock(wl)声明移到函数外部(甚至移动到外部类),即使事情在仿真器上运行(根据我的理解,它应该不会产生任何影响) ,它确实没有:() 代码:
public class Class1 extends Binder {
public static class Class1A extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp");
//Acquire the lock
wl.acquire(5 * 1000); //5 seconds to expiration
// Do a few things
}
/// Some more code setting up the alarm
}
private class ReminderHandler extends CountDownTimer {
@Override
public void onTick(long millisUntilFinished) {
logTxt.append("\nTicked. ");
}
@Override
public void onFinish() {
GregorianCalendar tmp = new GregorianCalendar();
logTxt.append("\nCountdown completed at "+ frmtr.format(tmp.getTime()));
}
public ReminderHandler(int Len)
{
super((((long) Len)*60*1000),60*999);
}
}
}
}
正如我所说,收到警报后,我成功获得了一个唤醒锁,但onTick
在我实际解锁手机并打开应用程序之前不会发生。
答案 0 :(得分:0)
嗯,这不是我满意的答案,但就目前而言,这就是我的全部:
似乎需要超过5秒(甚至超过我后来给它测试的15秒)才能让CountdownTimer赶上(即使它应该只有1 onTick
和1 onFinish
要求赶上来。)
我只是在onFinish
中发布了唤醒锁。我不喜欢这个(因为如果有一些错误,最终可能会把唤醒锁停留太长时间),但就目前来说,这就是我所能做的。