Android:警报和IntentServices

时间:2014-11-01 21:18:14

标签: alarmmanager alarm intentservice repeatingalarm

经过大量关于一起实施IntentServices和Alarms的研究,我想出了这个。我不知道这段代码到底发生了什么,所以我需要帮助才能确切知道发生了什么。

public class MainActivity{
  
  //....

    public void onNewItemAdded(String[] _entry){
            
            //...

  	        Intent intent = new Intent(MainActivity.this, UpdateService.class);
	        startService(intent);
    }

  //....
}

public class AlarmReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		Intent startIntent = new Intent(context, UpdateService.class);
		context.startService(startIntent);
      }
    public static final String ACTION_REFRESH_ALARM = "com.a.b.ACTION_REFRESH_ALARM";
}

public class UpdateService extends IntentService{
  //...
  @Override
	public void onCreate() {
		super.onCreate();
		alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		String ALARM_ACTION = AlarmReceiver.ACTION_REFRESH_ALARM;
		Intent intentToFire = new Intent(ALARM_ACTION);
		alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);
	}

	@Override
	protected void onHandleIntent(Intent intent) {
		Context context = getApplicationContext();
		SharedPreferences prefs = PreferenceManager
				.getDefaultSharedPreferences(context);
		int updateFreq = Integer.parseInt(prefs.getString(
				PreferencesActivity.PREF_UPDATE_FREQ, "60"));
		boolean autoUpdateChecked = prefs.getBoolean(
				PreferencesActivity.PREF_AUTO_UPDATE, false);
		if (autoUpdateChecked) {
			int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;
			long timeToRefresh = SystemClock.elapsedRealtime() + updateFreq
					* 60 * 1000;
			alarmManager.setInexactRepeating(alarmType, timeToRefresh,
					updateFreq * 60 * 1000, alarmIntent);
		} 
		else {
			alarmManager.cancel(alarmIntent);
		}
		refreshKeywords();
	}
 }

我的目标是每分钟调用一次refreshKeywords()方法。另外,如果多次调用onNewItemAdded()方法会发生什么?

很抱歉,如果这个问题很愚蠢,我是初学者。

1 个答案:

答案 0 :(得分:0)

如果您希望每分钟调用refreshKeywords()方法,为什么要像这样使用AlarmManager,

  private void ServiceRunningBackground() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        final int restartAlarmInterval = 6000;
        final int resetAlarmTimer = 2*1000;
        final Intent restartIntent = new Intent(this, MyService.class);
        restartIntent.putExtra("ALARM_RESTART_SERVICE_DIED", true);
        final AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Handler restartServiceHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg) {
                PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, restartIntent, 0);
                alarmMgr.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + restartAlarmInterval, pintent);
                sendEmptyMessageDelayed(0, resetAlarmTimer);
            }
        };
        restartServiceHandler.sendEmptyMessageDelayed(0, 0);
    }
}

只需在您想要的地方调用此方法并相应地设置时间