Java runnable的问题
有人建议我使用此代码使我的方法在一段确定的时间后执行,我对其进行了一些修改,现在我有:Java runnable的问题,java,android,runnable,Java,Android,Runnable,有人建议我使用此代码使我的方法在一段确定的时间后执行,我对其进行了一些修改,现在我有: private Handler mHandler = new Handler(); private Runnable mUpdateTimeTask = new Runnable() { public void run() { final long start = mStartTime; // Get the difference in ms long
private Handler mHandler = new Handler();
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
final long start = mStartTime;
// Get the difference in ms
long millis = SystemClock.uptimeMillis() - start;
// Format to hours/minutes/seconds
int mTimeInSec = (int) (millis / 1000);
// Do your thing
Location location = tracker.getLastKnownLocation(best);
RetrieveAvgPower(location);
// Update at the next second
mHandler.postAtTime(this, 1000);//start + ((mTimeInSec + 10) * 1000));
}
};
我试着用以下方法开始和结束它:
public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
mStartTime = System.currentTimeMillis();
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 1000);
break;
case R.id.stop:
mHandler.removeCallbacks(mUpdateTimeTask);
break;}}
然而,有一个问题。首先,我的方法设置文本并将一行写入日志文件,但是如果我使用上面的代码,文本不会被设置,但是所有信息都会自动写入日志文件。另一件事是我不能停止runnable——在它开始执行后,若我试图按下停止按钮,程序似乎并没有响应并崩溃。我做错了什么以及如何解决?的最后一行
run()
不应该调用Handler.postDelayed()
而不是Handler.posttime()
根据Android中事件队列的实现方式,您可能会使用错误的线程终止线程。。。基本上,您反复将Runnable设置为在线程最初启动后1秒运行,因此没有其他事件可以运行。要停止Runnable,您可以添加如下内容:
class A implements Runnable
{
private volatile boolean runTask = false;
public void run()
{
runTask = true;
while(runTask)
{
// Do your thing
Thread.sleep(1000); // wait 1 second before "Do your thing" again
}
}
public void stop()
{
runTask = false;
}
}
至于没有更新的文本,我不太理解,是不是在swing gui中没有设置
编辑
在run方法的末尾添加了Thread.sleep(1000)
按同行编辑:
移动了Thread.Sleep(1000),使Runnable每秒运行一次,直到停止(而不是连续运行,然后在停止后等待1秒)