【问题标题】:How to call function repetitively in Android app?如何在Android应用程序中重复调用函数?
【发布时间】:2012-02-27 13:03:18
【问题描述】:

我在我的 Android 应用程序中使用相机,我想每 30 秒拍一张照片。例如。对于间隔,我想使用先前时间和当前时间 System.currentTimeMillis() 或超时之间的差异。但我不知道如何使函数被重复调用。有什么解决办法吗?

【问题讨论】:

    标签: java android multithreading time timer


    【解决方案1】:

    您需要多线程。如果你打电话给分机。活动,它使用 UI,所以你不应该使用 Timer。仅处理程序。许多用于多线程的 java 类不适用于 Android UI。使用这个类:

    import android.os.Handler;
    
    
    /**
    * Examples of use:
    * 
    *   Waiter(Runnable call, 30000); - in the calling method
    *
    * @author Petr Gangnus
    */
    public class Waiter {
        /**
         * the handler that works instead of timer and supports UI
         */
        static private Handler handler = new Handler();
        Runnable task;
    
        public Waiter(Runnable task,long time){
            this.task=task;
            handler.removeCallbacks(task);
            handler.postDelayed(task, time);
        }
    
        public void stopWaiting(){
            handler.removeCallbacks(task);
        }
    
    }
    
    // setting the task called - in the calling method
    final private Runnable call = new Runnable() {
        @Override
        public void run() {
            ...;
        }
    };
    

    【讨论】:

    • 真的需要多线程吗?现在我在按钮点击监听器上拍摄了照片,我想独立运行它。
    • 你想怎么等?一个线程正在等待,另一个是另一个(相机)应用程序的调用活动。真的,Android 都是线程。简单线程类可用于算法线程(非 ui)、处理程序和其他线程 - 用于 UI 线程。
    • 您建议的解决方案的任何示例,甚至是准代码?简单的如何 - 第一次拍摄由按钮触发的照片,然后在由 buttonClick.performClick() 触发的 PictureCallback 处?
    • 在我已经附加的代码中,表盘每 refreshStep 毫秒刷新一次。 (由 start() 设置)。只需将您的相机调用放在那里,而不是 textViews 刷新。
    • 我在这里放了一个更简单、更简短的例子
    【解决方案2】:

    当您想定期执行任何任务时,TimerTask 类是最好的。查看一个非常简单的示例here。在其运行方法中,您可以放置​​要定期执行的编码。您也可以在调度时给出时间间隔。

    【讨论】:

    • 很高兴用 System.out.println("Time's up!"); 展示示例,但他需要调用活动。看看这里的网站 - 定时器在 UI 中使用是安全的。按下按钮和调用活动是 UI。您应该改用 Handler 。简单的方法在这里根本行不通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多