【发布时间】:2016-11-18 06:08:34
【问题描述】:
我一直在尝试创建一个在 android 中计数的自定义秒表。它需要相当精确到 0.1 秒,并具有数字示例的自定义布局和图像:DIGITS。
它还需要能够在应用最小化或关闭后在后台运行。更具体地说,强制应用在计时器开启时保持打开状态(我不知道如何实现)。
到目前为止,我已经尝试过使用 Handlers、Runnables、scheduledExecutorService 和 android Chronometer 类。
处理程序有性能问题,占用 45%> cpu 使用率(我认为这是因为 UI 不断更新?)。我已经设法让它使用 scheduleExecutorService 以适度的性能工作,但它仍然存在在后台或方向更改期间继续的问题。
我正在尝试创建类似于 HTC one M7 上的默认时钟秒表的东西。它在后台和方向更改期间工作,不会浪费任何时间。
计时器将在使用 ViewPager 和滑动选项卡布局的 Activity 中位于其自己的 Fragment 中。
这是秒表的可运行文件
public Runnable run() {
return new Runnable() {
@Override
public void run() {
centiseconds++;
if (centiseconds > 9) {
centiseconds = 0;
seconds++;
}
if (seconds > 59) {
seconds = 0;
minutes++;
}
if (minutes > 59) {
minutes = 0;
hours++;
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateCustomUI();
}
});
}
};
}
然后在片段中初始化 scheduleExecutorService
ScheduledFuture scheduledFuture;
ScheduledExecutorService scheduledExecutorService;
启动计时器
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(run(), 0, 100, TimeUnit.MILLISECONDS);
然后停止它
scheduledFuture.cancel(true);
【问题讨论】:
-
当显示屏关闭或您的应用程序在后台运行时,您的代码将失败,因为 Android 会停止它并且您的计数代码也会停止。使用 CountDownTimer 而不是您自己的秒计数代码。
-
那只会对倒计时有用吧?我将如何实现它来计数? (就像在秒表中一样)。
-
阅读文档然后你会看到有一个
onTick()方法可以每1000毫秒触发一次。
标签: android runnable scheduledexecutorservice chronometer