我的應用程序在模擬器上運行平穩 - 一切正常工作 - 但不在手機上。即使獲取了wakelock,CountdownTimer也不會打勾
在我的應用程序中,我使用了每分鐘都會打勾的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
不會發生,直到我真正解鎖手機並打開應用程序
你在你的應用中使用了什麼樣的aoid api級別? – dilix
最重要的是顯示代碼sir – Elltz
@dilix編譯API級別19.如果最近有更新,則生成工具23.1.0或更高版本:P – user1999728