4

我想要使用Alarm Manager來執行重複任務,同時啓動我的應用程序,但我在取消任務時遇到問題。如何在Alarm Manager中取消重複任務?

這是我的代碼:

服務:

public class SyncService extends Service { 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("#####", "It's alive!"); 
     return Service.START_NOT_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

應用:

public class TerminalApplication extends Application { 
    PendingIntent pintent; 
    AlarmManager alarm; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Intent intent = new Intent(this, SyncService.class); 
     pintent = PendingIntent.getService(this, 0, intent, 0); 
     alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Log.e("#####", "Starting alarm"); 
     alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, System.currentTimeMillis(), 5 * 1000, pintent); 
    } 

    @Override 
    public void onTerminate() { 
     clear(); 
     super.onTerminate(); 
    } 

    public void clear() { 
     alarm.cancel(pintent); 
     Log.e("#####", "Alarm cancelled"); 
    } 
} 

這就是我所看到的日誌中:

07-09 14:53:30.399: ERROR/#####(1743): Starting alarm 
07-09 14:53:52.690: ERROR/#####(1590): It's alive! 
07-09 14:54:02.690: ERROR/#####(1590): It's alive! 
07-09 14:54:12.690: ERROR/#####(1590): It's alive! 
07-09 14:54:20.475: ERROR/#####(1743): Alarm cancelled 
07-09 14:54:22.695: ERROR/#####(1590): It's alive! 
07-09 14:54:32.696: ERROR/#####(1590): It's alive! 

我使用的是相同的意圖取消t問,即使是同一個實例,但它不起作用。你可以幫我嗎?

回答

0

好奇嗎,pintent仍然在clear()中持有SyncService的細節?

+0

是的,pintent保持絕對相同 –

+1

我已經使用了符合我的要求的RTC_WAKEUP標誌,setrepeating和cancel按照預期工作。請嘗試更改此設備,並驗證它是否與您的功能相符,因爲API會說:「此警報不會喚醒設備;如果設備在睡着時關閉,它將不會在設備下次喚醒之前交付。 「 – user755

+0

」對您有幫助嗎? – user755