- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个按时间间隔执行的应用程序。更新之间我可以等待的绝对最长时间是30秒,介于0和0之间的任何值都是可以接受的,但是我希望15秒是一个很好的衡量标准。但是,它并不像听起来那样容易。我尝试了4种方法,由于种种原因,所有这些方法都 Not Acceptable 。
请记住,这些问题在Service
中发生,当此代码在Activity
中运行时,它运行良好。我还注意到,将手机插入计算机进行调试时,解决方案3可以正常运行,直到我将其插入为止。我检查了电池设置,没有省电模式或类似的其他内容,这可能是造成这种情况的原因。
1.会执行填充操作的IntentService
,然后在15秒内重新安排自身的时间。不幸的是,当涉及到准确的警报时,AlarmManager.setExact()完全不可靠,正如我在此风滚草中所描述的:Android Alarm not triggering at exact time
2.具有Thread
的前景服务。在那个线程中,我做我的事情,然后sleep()
15秒钟。事实证明,此方法比以前更糟,该线程在正确的时间之后最多5分钟被唤醒。
3.然后我尝试使用Timer
(如geokavel建议),并使用scheduleAtFixedRate
和schedule
安排工作,但工作进行得太晚了15-45秒,使间隔大约为1分钟而不是15秒。
4.我想到的最后一种方法是不要从上方进入前台服务的Thread
。相反,我比较时间:
public void run(){
nextTime = System.currentTimeMillis() + sleep;
while (true){
if (System.currentTimeMillis() >= nextTime) {
nextTime = System.currentTimeMillis() + sleep;
//do stuff
}
}
}
public void run(){
try {
if (Thread.currentThread().isInterrupted()){
throw new InterruptedException();
}
NetworkInfo info = cm.getActiveNetworkInfo();
if (info == null) {
throw new UnknownHostException();
}
if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
Log.i(TAG, "Won't use mobile connection");
throw new UnknownHostException();
} else {
internetRestored();
st.updateData();
}
} catch (MalformedURLException | UnknownHostException e) {
internetFailed();
Log.e(TAG, "No internet connection, cant log");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
Log.i(TAG, "Thread iterrupted");
}
}
最佳答案
您将目标/编译为哪个API?
编辑: checkout 处理程序:
https://developer.android.com/reference/android/os/Handler.html
There are two main uses for a Handler: (1) to schedule messages and runnables to be executed as some point in the future; and (2) to enqueue an action to be performed on a different thread than your own. ... When posting or sending to a Handler, you can either allow the item to be processed as soon as the message queue is ready to do so, or specify a delay before it gets processed or absolute time for it to be processed. The latter two allow you to implement timeouts, ticks, and other timing-based behavior.
Otherwise, the alarm will be set as though the application had called setRepeating(int, long, long, PendingIntent). As of API 19, all repeating alarms will be inexact and subject to batching with other alarms regardless of their stated repeat interval.
Note: Beginning with API 19 (KITKAT) alarm delivery is inexact: the OS will shift alarms in order to minimize wakeups and battery use. There are new APIs to support applications which need strict delivery guarantees; see setWindow(int, long, long, PendingIntent) and setExact(int, long, PendingIntent). Applications whose targetSdkVersion is earlier than API 19 will continue to see the previous behavior in which all alarms are delivered exactly when requested.
Causes the thread which sent this message to sleep for the given interval of time (given in milliseconds and nanoseconds). The precision is not guaranteed - the Thread may sleep more or less than requested.
This class does not offer guarantees about the real-time nature of task scheduling.
Delayed tasks execute no sooner than they are enabled, but without any real-time guarantees about when, after they are enabled, they will commence. Tasks scheduled for exactly the same execution time are enabled in first-in-first-out (FIFO) order of submission.
关于android - 如何在Android服务上实现准确的(精确到秒)计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33160732/
感觉我在这里遗漏了一些明显的东西,所以提前道歉。无论如何,这是我尝试转换的一些数据a: acct_num year_prem prem exc 001 20
我正在尝试将表中的模式与用户话语 匹配。 string userUtterance = "I want identification number for number of customers";
当尝试在 Precise 上链接 gccgo 时,出现此链接错误: matt@matt-1005P:~/src/gopath/src/meme$ gccgo cmd/meme/main.go -o m
假设我有以下数据和命令: clc;clear; t = [0:0.1:1]; t_new = [0:0.01:1]; y = [1,2,1,3,2,2,4,5,6,1,0]; p = interp1(
假设我有以下数据和命令: clc;clear; t = [0:0.1:1]; t_new = [0:0.01:1]; y = [1,2,1,3,2,2,4,5,6,1,0]; p = interp1(
我总是想给精确匹配比只匹配前缀的分数更高的分数(例如,“ball”在与“ball*”匹配时应该比“ballistic”得到更高的分数)。 我当前(详细)的方法是在创建 PrefixQuery 时始终执
有什么解决方法可以让我在 Android 中使用 long 或 double 来寻找音频文件中的位置吗?目前 seekTo 只接受 ints 参数。我想更精确(比如在十分之一秒内) int resID
我的 replacingOccurrences 函数有问题。我有一个这样的字符串: let x = "john, johnny, johnney" 我需要做的只是删除“john” 所以我有这段代码:
我正在使用 BeautifulSoup 进行网页抓取。我有这段代码来提取 a 标签的值,但它似乎不起作用。显示错误: AttributeError: 'int' object has no attri
我要在带有标记顶点和标记有向边的图上寻找一种不精确的图匹配算法。我的任务是检测两个图表的变化以将它们显示给开发人员(想想颠覆差异)。我已经实现了基于禁忌搜索 ( this ) 的优化算法,但我无法让该
我有两个网站: example.com 和 yyy.com 他们都有类似的网络应用程序,但在不同的服务器上。我想让 Apache 将所有路径请求重定向到 example.com 与 完全相同的方式yy
因此,我尝试合并两个公司信息数据库(从现在起表 A 和表 B),其中最常见(且可靠)的单一引用点是网站 URL。表 A 已更新,表 B 待更新。 我已经从表 A 中提取了 URL,并使用 PHP 清理
我正在 http://classicorthodoxbible.com/new.html 上制作效果主要描述中的 Angular 色,包裹在自己的跨度中,从他们通常的休息地点移动到随机位置,然后通过指
我目前正在使用我的 Raspberry Pi 及其内置 UART 输入编写 MIDI 合成器。 在某个时间点,为了启用 MIDI 输入的实时回放,我必须设置一种环形缓冲区以与 OpenAL 一起使用,
在 C 中,当设置了一个 float 时, int main(int argc, char *argv[]) { float temp = 98.6f; printf("%f\n",
实现 MP3 无间隙循环的最佳可能性是什么?目前我正在使用 AVAudioPlayer 并将 .numberOfLoops() 属性设置为 -1 但可以听到,轨道重新启动。情况并非如此,例如使用 Tr
我想创建不一定是“正确”矩阵的“类矩阵”对象。但是,确切地说,“类矩阵”是什么意思? 示例 1 > image(1:9) Error in image.default(1:9) : argument
给定一个像这样的 XML 文档: john &title; 我想解析上面的 XML 文档并生成其所有实体已解析的副本。因此,给定上述 XMl 文档,解析器应输出: john
需要说明的是,这种方法不是我要找的: 事实上,此方法会调整 ImageField 的大小。我想将 Image 对象的大小调整为特定且精确的无比例分辨率。有什么办法吗? --编辑-- 对我来说,Ima
我正在尝试使用 TF2.0 eager 模式执行精确的 GP 回归,基于来自 https://colab.research.google.com/github/tensorflow/probabili
我是一名优秀的程序员,十分优秀!