我有一个带有实现 Runnable 的类的应用程序。启动线程并覆盖 run() 方法的位置。这运行我的图形。
1.st 问题:run() 多久调用一次?我还没有为此设置时间,所以它必须是默认值?
2.nd 问题:我希望在一定的时间(2 分钟、5 分钟、10 分钟)等之后完成一些事情。这样做的最佳方法是什么,我正在考虑使用 int 作为计数器,一次它达到了我想要的特定值。
1.st 问题:run() 多久调用一次?我还没有为此设置时间,所以它必须是默认值?
run()
当你调用它时调用你的线程中的方法,例如。yourThread.start();
2.nd 问题:我希望在一定的时间(2 分钟、5 分钟、10 分钟)等之后完成一些事情。这样做的最佳方法是什么,我正在考虑使用 int 作为计数器,一次它达到了我想要的特定值。
有选项。要么你可以调用Thread.sleep()
方法(注意:永远不要在你的 UI 线程中这样做)。
或者您可以按照上面描述的方式进行操作。因此,在您的run()
方法中,您将有一个while()
循环并检查每次迭代是否 lastUpdate 和当前时间(以毫秒为单位)的差异大于所需的周期,例如。2 分钟、5 分钟或 10 分钟。
我希望这有帮助。
关于问题 2 - 使用ScheduledExecutor
1.st 问题:run() 多久调用一次?
您可以自己找出答案,将其放在 Runnable 的开头:
Log.v("Running Runnable", System.currentTimeMillis() + "");
2.nd 问题:我希望在一定的时间(2 分钟、5 分钟、10 分钟)等后完成一些事情。
扩展一个HandlerThread(它为你初始化 Looper!),添加一个 Handler 作为类变量,并使用 Handler 的postDelayed()
或postAtTime()
方法。
调用 run() 之间的确切时间量取决于处理器。每次调用之间的时间是纳秒内真正可见的那种东西。如果你想创建一个计时器,我建议使用 System.currentTimeMillis(),在 run() 方法中调用它,一旦差值大于或等于 1000 毫秒,实际计时器减一。这将跟踪秒数,您可以将其用作分钟数的基础,并在特定时间生成其他事件。