简体   繁体   English

AlarmManager首先触发一次,然后每秒触发一次……为什么?

[英]AlarmManager fire one time firstly but then fire repeatedly in every second… why?

I am using a offline task for that I have to call Webservice in backgourd in every 5 mintus. 我正在使用一个离线任务,因为我必须每5分钟调用backgourd中的Webservice So I am using AlarmManager for it. 所以我正在使用AlarmManager

First time AlarmManager fire onTime(after 5 min of start), but after than it fire in evry seconds, i don't know why? 第一次AlarmManager触发onTime(开始5分钟后),但之后却在每秒钟触发一次,我不知道为什么?

I want fire AlarmManager in every 5 min only... 我只希望每5分钟触发一次AlarmManager ...

Please help.. 请帮忙..

This is the code for start timer.. 这是启动计时器的代码。

public void startOfflineDateAlarm() {

    //* For Start Offline Sync Timer*//
    Intent intentAlarm = new Intent(this, AlarmReceiver.class);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, Constant.offlineDataAlarmTime,
            PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
    Log.e(TAG, "ALARM START");

    saveOfflineTables(getApplicationContext());
}

And this is the BroadcastReceiver where I am doing my task for call Webservices . 这就是BroadcastReceiver ,我将在其中执行呼叫Webservices任务。

I have also added code for start AlarmManager in BroadcastReceiver for start AlarmManager again for next 5 min.(If am wrong for that please correct me.) 我还添加了用于在BroadcastReceiver中启动AlarmManager的代码, AlarmManager在接下来的5分钟内再次启动AlarmManager。(如果这样做有误,请更正我。)

public class AlarmReceiver extends BroadcastReceiver {

    String TAG = "AlarmReceiver";
    public static PendingIntent pendingIntent;
    public static AlarmManager alarmManager;

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.e(TAG, "ALARM CLICKED");

        //* For Start Offline Sync Timer*//
        Intent intentAlarm = new Intent(context, AlarmReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(context,1,  intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP,Constant.offlineDataAlarmTime, pendingIntent);


        saveOfflineTables(context);
        syncOfflineDataWithServer(context);
    }

    private void saveOfflineTables(Context context) {

        SharedPreferences sharedPreferences = context.getSharedPreferences("SFAData", MODE_PRIVATE);
        String screenCheck = sharedPreferences.getString("CheckScreen", "");
        String userId = sharedPreferences.getString("id", Constant.DEFAULT);
        String storeCode = sharedPreferences.getString("store_code", DEFAULT);
        String storeId = sharedPreferences.getString("store_ID", DEFAULT);

        Log.e(TAG, "saveOfflineTables");
        OfflineDataSave.saveItemList(context, userId);
        OfflineDataSave.savePromotionList(context, storeId);
        OfflineDataSave.saveSubCategoryList(context,userId);
        OfflineDataSave.saveSubSubCategoryList(context,userId);
        OfflineDataSave.saveDistributorList(context, userId);
        OfflineDataSave.saveStoreList(context, userId);
        OfflineDataSave.saveBAList(context, userId);
        OfflineDataSave.saveCustomerList(context, userId);
        OfflineDataSave.saveDailyTask(context, userId);

        OfflineDataSave.saveTargetVsAchievement(context, userId);
    }

    private void syncOfflineDataWithServer(Context context){

        DataSyncWithServer.syncAttendance(context);
        DataSyncWithServer.syncCounterHygiene(context);
        DataSyncWithServer.syncCompetition(context);
        DataSyncWithServer.syncCustomerRegistration(context);
        DataSyncWithServer.syncMakeOver(context);
        DataSyncWithServer.syncCustomerFeedback(context);
        DataSyncWithServer.syncTrackingData(context);
        DataSyncWithServer.syncSalesInvoice(context);
        DataSyncWithServer.syncSalesReturnInvoice(context);
        DataSyncWithServer.syncPurchaseReturnInvoice(context);
        DataSyncWithServer.syncStockTakeInvoice(context);
        DataSyncWithServer.syncOrderManagementInvoice(context);
        DataSyncWithServer.syncTesterManagementInvoice(context);
    }
}
  public void startOfflineDateAlarm() {

  //* For Start Offline Sync Timer*//
        Intent intentAlarm = new Intent(this, AlarmReceiver.class);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        /*alarmManager.set(AlarmManager.RTC_WAKEUP, Constant.offlineDataAlarmTime,
            PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
         */

        Log.e(TAG, "ALARM START");
        long firstRunTime = calendar.getTimeInMillis();
        long futureInMillis = 5 * 60 * 1000;  //Repeat after 5 min
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                firstRunTime,
                futureInMillis,
                intentAlarm);
        saveOfflineTables(getApplicationContext());
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM