0

Runnable を Android のループとして使用しています。このように:

    Timer timer = new Timer();
    timer.schedule(new looper(m_mainView, this),0, Rate);

「Rate」ミリ秒ごとに実行されます。

ルーパーは次のとおりです。

class looper extends TimerTask
{
    private ImageView img;
    Context c;


    public looper(ImageView imgView, Context context)
    {
        this.img = imgView;
        this.c = context;
    }

    public void run()
    {   
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
....

コードが終了するまでコードをロックしたいrun()ので、終了する前に呼び出された場合、呼び出したスレッドが戻って終了します。

synchronized(Object)内部でアプローチを試みましたが、うまくいきませrun()んでした。また、ミューテックスも試しましたが、これも機能しませんでした。

ヘルプ :)

4

3 に答える 3

0

まず、run メソッドが再度呼び出されるリスクがあるのはなぜですか? それが本当なら、私には設計上の欠陥のように聞こえます。次に、TimerTask の代わりに、ScheduledExecutorServiceを使用したほうがよい場合があります。これは、スケジュールされたタスクを一定の間隔で実行する標準的で最も簡単で安全な方法です。ユーザー コードにはエグゼキュータ サービス以外からはアクセスできず、そこから ScheduledFuture を取得して戻り値を取得できるため、タスクがいつ完了したかがわかります (get() を呼び出すと、ScheduledFuture がブロックされます)。詳細については Java Concurrency in Practice をご覧ください...

于 2013-05-16T16:03:16.843 に答える
0

synchronized次のようにメソッド宣言に追加する必要があります。

public synchronized void run()
于 2013-05-16T15:15:10.337 に答える