Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中创建循环临时动作的线程_Java_Android_Multithreading_Sleep - Fatal编程技术网

Java 如何在android中创建循环临时动作的线程

Java 如何在android中创建循环临时动作的线程,java,android,multithreading,sleep,Java,Android,Multithreading,Sleep,我想,在我的主要活动中,启动一个线程,每x秒做一些事情。 这个说法正确吗 取自我的oncreate方法: Thread thread = new Thread() { @Override public void run() { try { while(true) { sleep(5000); do stuff

我想,在我的主要活动中,启动一个线程,每x秒做一些事情。 这个说法正确吗

取自我的oncreate方法:

  Thread thread = new Thread()
    {
        @Override
        public void run() {
            try {
                while(true) {
                    sleep(5000);

                    do stuff

    };
    thread.start();

如果相关,它会每5秒启动一个视频播放器并检查其缓冲区。

您可以使用Java的
ExecutorService创建灵活有效的计时器

// create executor that consists of 1 thread
final ExecutorService e = Executors.newScheduledThreadPool(1);

// schedule it to execute every 5000 ms starting from now
((ScheduledExecutorService) e).scheduleAtFixedRate(new Runnable(){
     @Override
     public void run() {
         // your repeating task
     }                  
}, 0, 5000, TimeUnit.MILLISECONDS);
这种方法更灵活,而且如果Java文档不说谎的话,更精确,因为它独立于系统时钟变化


使用计时器任务。请注意,要触摸ui,您需要在ui线程上发布queue@blackbelt基本上我应该在代码中用timertask替换world线程?使用这个参照物似乎是这样的。为什么使用线程比使用线程更好?我不必与ui交互,只需进行一些计算。为什么您不喜欢您现有的方法?如果不考虑异常,看起来还可以handling@SashaSalauyou我以前从来没有实现过线程,我读到不推荐使用sleep,因为它可能会冻结主线程(这似乎很奇怪,但是网络上有人这么说…
thread.sleep()
只能在从主线程调用主线程时冻结主线程。。。在这里,您从单独的线程调用它,所以没有什么需要担心的。但是,如果您想遵循好的风格建议,请查看Java的
ExecutorService
,尤其是它的
ScheduledExecutorService
子类。