Добавить таймер в мой код - PullRequest
1 голос
/ 25 ноября 2010

Я хочу добавить таймер, который при каждом тике таймера (1 секунда) заставляет строку обновляться. Как использовать таймер в моем коде?

Вот мой код:

LineRefresh.java

package LineRefresh.xyz.com;

import java.util.Timer;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

public class LineRefresh extends Activity {
DrawView drawView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    drawView = new DrawView(this);
    drawView.setBackgroundColor(Color.WHITE);
    setContentView(drawView);
}

}

DrawView.java

package LineRefresh.xyz.com;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawView extends View {
Paint paint = new Paint();

public DrawView(Context context) {
    super(context);

}

@Override
public void onDraw(Canvas canvas) {
 paint.setColor(Color.BLACK);
    canvas.drawLine(50, 200, 270, 200, paint);
}

}

Ответы [ 4 ]

3 голосов
/ 08 октября 2011

Другой способ сделать это можно следующим образом:

Handler updateHandler;

@Override
public void onCreateBundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  updateHandler = new Handler();
  // Do this first after 1 second
  updateHandler.postDelayed(RecurringTask, 1000);
}

Runnable RecurringTask = new Runnable() {
  public void run() {
    // Do whatever you want

    // Call this method again every 30 seconds
    updateHandler.postDelayed(this, 30000);
  }
};

У меня возникли проблемы с маршалингом потока пользовательского интерфейса с помощью решения Timer / TimerTask, так что вот еще один, который в конечном итоге мне помог!

2 голосов
/ 25 ноября 2010

Здесь решение с помощью Java Timertask:

Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                hereYourMethod();
                }
            }
        };
        timer.schedule(task, 1000,1000);// (the task, when to start, when to repeat)
1 голос
/ 25 ноября 2010

В качестве альтернативы можно использовать обработчик.

mHandler = new Handler(new Handler.Callback()
{
    @Override
    public boolean handleMessage(Message msg)
    {
        if(msg.what == REFRESH)
        {
            // TODO Refresh Code

            return true;
        }

        return false;
    }
});

mHandler.sendEmptyMessageDelayed(REFRESH, mMilliSecondsToRefresh);

Затем, когда вы хотите, чтобы он прекратился (это также должно войти в onStop (), чтобы оно не продолжалось в фоновом режиме, когда ваше приложение не активно):

mHandler.removeMessages(REFRESH);
0 голосов
/ 25 ноября 2010

Вы можете дать потоку спать в течение 1 секунды:

Thread.sleep(1000); //1000 milliseconds = 1 second

Если вы используете Swing, лучше всего использовать Таймер Swing : http://download.oracle.com/javase/tutorial/uiswing/misc/timer.html

В вашем случае, возможно, вам следует использовать Таймер : http://download.oracle.com/javase/6/docs/api/javax/swing/Timer.html

...