2011-08-21 69 views
0

我创建了一个应该重复运行并启动服务的AlarmManager。我的问题是它只运行一次。我无法弄清楚什么是错的。现在我已经将AlarmManager的创建附加到按钮上了。为什么我的AlarmManager setRepeating不重复?

这是MenuActivity类的一部分:

private void startUpdateService() { 
    Log.i(TAG, "Registering AlarmManager"); 

    Intent service = new Intent(MenuActivity.this, UpdateService.class); 
    pendingIntent = PendingIntent.getService(MenuActivity.this, 0, service, 0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, 10*1000, pendingIntent); 

} 

@Override 
public void onClick(View view) { 
    switch(view.getId()) { 
    case R.id.button_calendar: 
     Intent calendarIntent = new Intent(this, CalendarActivity.class); 
     if(Util.isOnline(this)){ 
      startActivity(calendarIntent); 
     }else { 
      Toast.makeText(MenuActivity.this, R.string.toast_is_online, Toast.LENGTH_LONG).show(); 
     } 
     break; 
    case R.id.button_settings: 
     startUpdateService();   
     Toast.makeText(MenuActivity.this, "Startet alarm", Toast.LENGTH_LONG).show();   
     break; 
    } 

} 

初始报警工作正常,但它不会重复。 任何知道我在做什么错的人?

+0

我没有意识到需要停止服务以便再次启动。感谢您发布您的调查结果。 =) – Aelexe

回答

1

我从警报中直接看到了几个运行服务的问题。我也有。我做了什么,是由广播接收器取代了服务的启动服务。你为什么不尝试呢?在Advanced Android中有很好的解释,版本1可以通过CC许可证获得。

+1

谢谢。我创建了一个接收器,但遇到同样的问题。问题在于服务本身不会运行一次以上。接收器应该每隔10秒钟被调用一次。但是,我在服务中添加了stopSelf(),现在每次都运行该服务。 结论:AlarmManager正在工作,但服务未运行。我不知道我的解决方案是否是最佳实践,但它是有效的。 – PeddyOfficer

+2

您确定使用正确的服务吗?也许你想每10秒启动一次服务,但是android保持活力?这将解释使用stopSelf()的必要性。我猜你正在使用onCreate()或onStart()来处理服务工作。考虑使用onHandleIntent()来代替。当你解决这个问题时,你可以跳过接收器并返回报警点火服务解决方案。很明显,服务是这里的问题,而不是警报,也不是可重复性。 – Moyshe

+0

按照你的建议。现在它工作得很好,不需要停止服务。 谢谢。 – PeddyOfficer