2015-11-21 23 views
1

我的應用程序在模擬器上運行平穩 - 一切正常工作 - 但不在手機上。即使獲取了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不會發生,直到我真正解鎖手機並打開應用程序

+0

你在你的應用中使用了什麼樣的aoid api級別? – dilix

+0

最重要的是顯示代碼sir – Elltz

+0

@dilix編譯API級別19.如果最近有更新,則生成工具23.1.0或更高版本:P – user1999728

回答

0

嗯,這不是一個我很滿意的答案,但現在,這是我擁有的全部:

似乎它需要超過5秒(甚至超過15秒後我給它測試)CountdownTimer追上(即使它應該只有1 onTick和1 onFinish調用趕上)。

我只是在onFinish發佈了wakelock。我不喜歡這樣(因爲如果有一些錯誤,最終可能會持續太久),但現在,這是我所能做到的。

相關問題