2015-06-14 100 views
1

在我的代码中,setRepeating()方法上的间隔(第三个参数)似乎不是每5秒触发一次。报警管理器未触发

它使在时间的增加,这就像第一个或2大多在时间,但其他火灾等之后40+secs

那么,什么是错在这里?

public class MainActivity extends ActionBarActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent i = new Intent(this, MainActivity2Activity.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    am.setRepeating(RTC_WAKEUP,System.currentTimeMillis(),1000*5,pi); 
     } 

    } 

回答

1

到这里看看:http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int, long, long, android.app.PendingIntent)

当你射击报警每5秒:

注意:定时操作(蜱,超时等)更容易和更高效地使用Handler。

您的代码没问题。您遇到延迟的说明可能是:

注意:从API 19开始,所有重复警报都是不精确的。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,如上所述每次重新安排时间。其targetSdkVersion早于API 19的传统应用程序将继续拥有其所有警报,包括重复警报,并将其视为确切对待。
+0

但我需要的过程中,即使过程被中止 – Flava

+0

对不起运行,但它不可能使这一进程运行时,它的死亡。 – kostek

0

从我从您的代码中了解到,您正试图在创建MainActivity.class 5秒后运行MainActivity2Activity.class。

我建议您在待定意图中使用FLAG_UPDATE_CURRENT而不是FLAG_CANCEL_CURRENT。 FLAG_CANCEL_CURRENT会保留您的第一个挂起的意图,并且不会更新或创建新的,除非您先取消原始未决意图。 使用FLAG_UPDATE_CURRENT将确保每次执行MainActivity.class时都会更新挂起的intent,以便在创建MainActivity.class 5秒后准确触发挂起的intent。

希望这会有所帮助。

+0

非常感谢,但我仍然需要在时间上的工作 – Flava

0

基本上你写PendingIntent.FLAG_CANCEL_CURRENT,而不是PendingIntent.FLAG_ONE_SHOT。通过报警管理

AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(ALARM_SERVICE); 
Intent i1 = new Intent(this, ReceiveAlarmActivity.class); 
i1.putExtra("Key", "Value"); 
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 0, i1, PendingIntent.FLAG_ONE_SHOT); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Your_Date.getTime(), 5000 operation); 

代码集报警你必须日期

完成