Android 为什么不是';我的经理不工作吗?

Android 为什么不是';我的经理不工作吗?,android,android-fragments,timer,alarmmanager,Android,Android Fragments,Timer,Alarmmanager,我试图发出一个警报,从现在起几秒钟内触发一个事件,一次,在DialogFragment中 下面是相关的代码,我在onCreate()中输入: 然后当我按下开始按钮时: alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timestampEnd, pendingIntent); 在这种情况下,timestampEnd=System.currentTimeMillis()+10*1000,10秒 然后我就推翻了毁灭: @Override

我试图发出一个警报,从现在起几秒钟内触发一个事件,一次,在DialogFragment中

下面是相关的代码,我在onCreate()中输入:

然后当我按下开始按钮时:

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timestampEnd, pendingIntent);
在这种情况下,
timestampEnd=System.currentTimeMillis()+10*1000,10秒

然后我就推翻了毁灭:

@Override
public void onDestroy() {
    alarmManager.cancel(pendingIntent);
    getActivity().unregisterReceiver(broadcastReceiver);
    super.onDestroy();
}

但是,由于某些原因,什么也没有发生。

您正在传递
AlarmManager.Expressed\u REALTIME\u WAKEUP
,这意味着检查时间戳时将使用
AlarmManager
。由于您传递的是根据
System.currentTimeMillis()
计算得出的数据,因此您需要等待大约47年才能触发警报


将第一个参数更改为
AlarmManager.RTC_WAKEUP
,或者将时间戳更改为根据
SystemClock.elapsedRealtime()

计算得出,经过的实时时间和RTC WAKEUP之间有什么区别?边际时间与绝对时间?您可以读取文档,但基本上其中一个是设备启动时从0开始的时间戳,其中一个是1970年1月1日00:00.Hmmm从0开始的时间戳。由于某种原因,计时器似乎不太准确,它没有与我的UI同步启动(晚了几秒钟)。这是正常的行为吗?很难说没有看到所有的代码,但是AlarmManager的文档中包含这样的警告:“注意:从API 19(KITKAT)开始)报警传递不准确:操作系统将切换报警,以尽量减少唤醒和电池使用。有新的API支持需要严格传递保证的应用程序;请参阅setWindow(int,long,long,pendingent)和setExact(int,long,pendingent)。targetSdkVersion早于API 19的应用程序将继续看到以前的行为,即所有警报都会在请求时准确发送。“Hmmm setExact似乎也不起作用,真奇怪(我在模拟器上测试,没有最小化或其他任何东西,直接盯着UI)
@Override
public void onDestroy() {
    alarmManager.cancel(pendingIntent);
    getActivity().unregisterReceiver(broadcastReceiver);
    super.onDestroy();
}