Java 在我的代码中添加计时器
我想添加一个计时器,在计时器的每一个滴答声(1秒)上,都会导致行刷新。如何在代码中使用计时器 以下是我的代码: LineRefresh.java:Java 在我的代码中添加计时器,java,android,timer,draw,Java,Android,Timer,Draw,我想添加一个计时器,在计时器的每一个滴答声(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 Ac
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);
}
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);
}
}
}
DrawView.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);
}
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);
}
}
您可以让线程休眠1秒:
Thread.sleep(1000); //1000 milliseconds = 1 second
如果您正在使用Swing,最好使用Swing timer:
在您的情况下,也许您应该使用计时器:您可以让线程睡眠1秒:
Thread.sleep(1000); //1000 milliseconds = 1 second
如果您正在使用Swing,最好使用Swing timer:
在您的情况下,也许您应该使用计时器:另一种方法是使用处理程序
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 = 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(),这样当您的应用程序未激活时,它不会在后台继续):
以下是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)
以下是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)
另一种方法是:
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线程时遇到了一些问题,因此这里有另一个解决方案最终对我有效 另一种方法是:
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线程时遇到了一些问题,因此这里有另一个解决方案最终对我有效 处理程序的创建通常在onCreate()中。mHandler变量本身将在类中定义为成员。sendEmptyMessageDelayed()方法将进入onCreate()或单击按钮以启动刷新序列。我不确定行刷新的最佳操作。我没有在安卓系统中处理过这个问题。然而,我给了你一个很好的方法来自动刷新。但是看看代码,我不确定为什么它需要刷新。onDraw()被重写,这对我来说意味着无论何时绘制(每帧?)它都应该执行其中的代码。如果它不是自动执行的,那么也许您可以找到一种方法,从处理程序内部访问onDraw()方法,以便以这种方式刷新它。@Knossos这将只更新一次(在mmillieSecondStoreFresh之后),然后停止。它实际上不会继续运行。处理程序的创建通常在onCreate()中。mHandler变量本身将在类中定义为成员。sendEmptyMessageDelayed()方法将进入onCreate()或单击按钮以启动刷新序列。我不确定行刷新的最佳操作。我没有在安卓系统中处理过这个问题。然而,我给了你一个很好的方法来自动刷新。但是看看代码,我不确定为什么它需要刷新。onDraw()被重写,这对我来说意味着无论何时绘制(每帧?)它都应该执行其中的代码。如果它不是自动执行的,那么也许您可以找到一种方法,从处理程序内部访问onDraw()方法,以便以这种方式刷新它。@Knossos这将只更新一次(在mmillieSecondStoreFresh之后),然后停止。事实上,它不会继续运行。请记住,我们现在使用的是Android,所以Swing不可用。此外,您还必须使用处理程序,因为您只能在UI线程内执行UI更改。你绝对不应该让UI线程处于休眠状态。请记住,我们现在使用的是Android,所以Swing不可用。此外,您还必须使用处理程序,因为您只能在UI线程内执行UI更改。而且你绝对不应该让UI线程处于休眠状态。+1为我这个使用生锈Java的Android新手提供了窍门+作为一个使用生锈Java的Android新手,1为我做了这件事!