2012-02-05 18 views
0

私はアンドロイドアプリでカメラを使用しており、30秒ごとに写真を撮りたいと思います。例えば。間隔については、前の時刻と現在の時刻System.currentTimeMillis()またはタイムアウトの差を使用します。しかし、私は機能を繰り返し呼び出されるようにする方法を知らない。どんな解決策ですか?Androidアプリで関数を繰り返し呼び出す方法は?

答えて

2

マルチスレッドが必要です。あなたが内線を呼んでいる場合。 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() { 
     ...; 
    } 
}; 
+0

本当にマルチスレッドのnescessaryですか?今私はボタンクライニックリスナーで撮った写真を持っていて、私はそれを独立して走りたい。 –

+0

どのように待っていますか? 1つのスレッドが待機しており、もう1つは他の(カメラ)アプリケーションの呼び出されたアクティビティです。本当に、Androidはすべてのスレッドです。シンプルなスレッドクラスは、UIスレッド用のalgirithmic threads(非UI)、Handlersなどに使用できます。 – Gangnus

+0

あなたが提案するソリューションの例は、擬似コードですか?最初はボタンでトリガされた機能を初めて撮ったのですが、buttonClick.performClick()でトリガされたPictureCallbackで機能するのはどうですか? –

3

タスクを定期的に実行する場合は、TimerTaskクラスが最適です。非常に簡単な例をチェックアウトhere。 runメソッドでは、定期的に実行したいコードを記述することができます。スケジューリング中に時間間隔を与えることもできます。

+0

System.out.println( "Time's up!");で例を示すのはいいですが、彼は活動を呼び出す必要があります。サイトの周りを見て - タイマーは、UIで使用する*安全*ではありません。ボタンを押してアクティビティを呼び出すことはUIです。代わりにHandlerを使用する必要があります。簡単な方法はここではうまくいきません。 – Gangnus

関連する問題