簡體   English   中英

在我的代碼中添加一個計時器

[英]Add a timer to my code

我想添加一個計時器,該計時器在計時器的每個滴答聲(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);
}

}

您可以執行以下另一種方法:

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解決方案將用戶線程編組到UI線程時遇到了一些麻煩,因此這又是一個對我有用的工作!

以下是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)

一種替代方法是使用處理程序。

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);

您可以讓線程休眠1秒:

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

如果您使用的是Swing,則最好使用Swing計時器http : //download.oracle.com/javase/tutorial/uiswing/misc/timer.html

就您而言,也許您應該使用Timerhttp : //download.oracle.com/javase/6/docs/api/javax/swing/Timer.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM