即使获得了wakelock,CountdownTimer也不会打勾

时间:2015-11-21 23:14:37

标签: android android-wake-lock

我的应用程序在模拟器上运行顺畅 - 一切都正常工作 - 但不在我的手机上。

在我的应用程序中,我同时使用每分钟刻度的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在我实际解锁手机并打开应用程序之前不会发生。

1 个答案:

答案 0 :(得分:0)

嗯,这不是我满意的答案,但就目前而言,这就是我的全部:

似乎需要超过5秒(甚至超过我后来给它测试的15秒)才能让CountdownTimer赶上(即使它应该只有1 onTick和1 onFinish要求赶上来。)

我只是在onFinish中发布了唤醒锁。我不喜欢这个(因为如果有一些错误,最终可能会把唤醒锁停留太长时间),但就目前来说,这就是我所能做的。