我一直在尝试创建一个在Android中计数的自定义秒表。它需要相当精确到0.1秒,并且数字示例的自定义布局和图像:DIGITS。
应用程序最小化或关闭后,还需要能够在后台运行。更具体一点,在计时器开启时强制应用程序保持打开状态(我不知道如何实现)。
到目前为止,我已尝试使用Handler,Runnables,scheduledExecutorService和android Chronometer类。
处理程序存在性能问题,咀嚼45%> CPU使用率(我认为这是因为UI不断更新?)。我已经设法让它使用具有适度性能的scheduledExecutorService工作,但它仍然存在继续在后台或在方向更改期间的问题。
我正在尝试在HTC one M7上创建类似于默认时钟秒表的东西。它可以在后台和方向更改期间工作而不会丢失任何时间。
使用ViewPager和滑动标签布局,计时器将位于Activity中自己的片段中。
这是秒表的可运行
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();
}
});
}
};
}
在片段i中,然后初始化scheduledExecutorService
ScheduledFuture scheduledFuture;
ScheduledExecutorService scheduledExecutorService;
启动计时器
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(run(), 0, 100, TimeUnit.MILLISECONDS);
并停止
scheduledFuture.cancel(true);
答案 0 :(得分:0)
在这种情况下,您可以将IntentService与ResultReciver
一起使用答案 1 :(得分:0)
我尝试过使用Android AnimationDrawable类,但性能差不多,androidDevelopers没有很多关于它的文档,比如准确性和可能会覆盖等等。
因此我认为我的实施效率最高,在HTC one M7上最高可达10%左右,平均为7%。
虽然我不确定我在尝试时是否正确实现了动画类,如果有人确切知道它是如何工作的,那么请随时告诉我。
使用不同的初始化启动scheduledExecutorService似乎解决了后台工作。
之前我使用
发起了它
scheduledExecutorService= Executors.newSingleThreadScheduledExecutor();
现在我用
scheduledExecutorService= Executors.newScheduledThreadPool(16);
线程池的任何其他任意数字似乎都运行正常,我还没有优化它并找到正确数量的线程来使用,但这有助于scheduledExecutorService在后台运行,因为它可以提供更多线程当活动或片段被破坏时,有些人会被摧毁。