2014-11-01 81 views
0

经过大量有关实施IntentServices和警报的研究,我已经想出了这个。我不知道这段代码究竟发生了什么,所以我需要帮助确切知道发生了什么。Android:警报和意图服务

public class MainActivity{ 
 
    
 
    //.... 
 

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

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

 
    //.... 
 
} 
 

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

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

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

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

对不起,如果这个问题很蠢,我是一个初学者。

回答

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); 
    } 
} 

只是调用这个方法无论你想去的地方,并设置相应的时间

+0

我不没办法。在使用此实现时,refreshKeywords()方法在哪里? 这个函数是用来替代AlarmReceiver类的吗? – 2014-11-01 21:55:16

+0

是的,你可以使用这个函数为你的AlarmReceiver – 2014-11-01 21:59:43

+0

好吧,我应该如何修改onHandleIntent()方法?只有在SystemPreferences活动表明它已由用户启用时,我才需要将闹钟设置为自动刷新。我已经在onHandleIntent()方法中做了这些。 另外,这个ServiceRunningBackground()方法应该放在哪里以及应该在哪里调用? – 2014-11-02 13:24:59