Java Android:在特定时间戳调用方法

Java Android:在特定时间戳调用方法,java,android,time,Java,Android,Time,如何在System.currentTimeMillis()的基础上以特定的时间戳(以毫秒为单位)调用方法?我希望我能正确回答您的问题 您可以首先根据时间戳计算延迟:(假设您的giventimestamp在将来) 然后将其传递给处理程序实例中的postdayed()方法: new handler().postDelayed(() -> myFancyMethod(), delay); 然后,当延迟时间过去时,将执行myFancyMethod() 更新 Android已经弃用了Hanlde

如何在System.currentTimeMillis()的基础上以特定的时间戳(以毫秒为单位)调用方法?

我希望我能正确回答您的问题

您可以首先根据时间戳计算延迟:(假设您的giventimestamp在将来)

然后将其传递给
处理程序
实例中的
postdayed()
方法:

new handler().postDelayed(() -> myFancyMethod(), delay); 
然后,当
延迟时间过去时,将执行
myFancyMethod()

更新 Android已经弃用了
Hanlder()
constructor(无参数)

请改用
新处理程序(Looper.getMainLooper())
新处理程序(Looper.myLooper())
。更多信息

ScheduledExecutorService
在周围放一个物体

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor() ;
计算等待的时间

Instant then = Instant.ofEpochMilli( 1_594_139_504_827L ) ;
Instant now = Instant.now() ; 
Duration d = Duration.between( now , then ) ;
if( d.isNegative() ) { … error … going back in time }
将任务定义为或。您可以使用如图所示,或者使用常规语法

Runnable runnable =
        ( ) -> {
            System.out.println( "Doing some task. " + Instant.now() );
        };
提交执行人服务。指定任务、运行该任务之前要等待的时间量以及(毫秒、秒、小时等)

您的runnable在后台线程上运行。永远不要从后台线程访问用户界面。请参阅Android文档:

在应用程序结束之前,请务必优雅地关闭executor服务。否则,支持线程池可能会无限期运行


这已经在堆栈溢出上多次得到解决。搜索了解更多信息。

@akuzminykh Android建议,如果您正在处理UI线程,请使用处理程序,而不是创建新线程Threads@Tano你能举出那项建议的参考资料吗?我看到了如何在后台线程上运行代码。当然,你不能从任何后台线程访问UI小部件,因为Android。这取决于你需要什么,你需要执行繁重/密集的回溯工作,最好使用线程,就像你发布的那样,如果你需要,例如在几秒钟后在UI中显示文本,那么更好的用户处理程序
Runnable runnable =
        ( ) -> {
            System.out.println( "Doing some task. " + Instant.now() );
        };
ses.schedule( runnable , d.toSeconds() , TimeUnit.SECONDS ) ;