我想要做的只是处理程序示例的基本实现。我在TextView
上有一个mainActivity
,一旦页面加载,处理程序应该运行并显示来自SystemClock.uptimeMillis
的用户值。但它不会超过一次。如何运行此代码?
public class MainActivity extends Activity {
long uptoMS=0L;
TextView tv;
Handler handler=new Handler();
long swaptime=0L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.textView1);
uptoMS=SystemClock.uptimeMillis();
tv.setText(String.valueOf(uptoMS));
handler.post(runner);
}
private Runnable runner=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
swaptime+=uptoMS;
tv.setTag(String.valueOf(swaptime));
handler.post(this);
}
};
}
答案 0 :(得分:0)
见下面的例子
scheduler(){
TimerTask tasknew = new TimerSchedulePeriod();
Timer timer = new Timer();
// scheduling the task at interval
timer.schedule(tasknew,100, 100);
}
// this method performs the task
public void run() {
System.out.println("timer working");
}
答案 1 :(得分:0)
timer = new Timer();
refreshTask = new TimerTask() {
@Override
public void run() {
swaptime+=uptoMS;
tv.setTag(String.valueOf(swaptime));
handler.post(this);
}
};
timer.schedule(refreshTask,
100, 100);
答案 2 :(得分:0)
嗯,您的代码存在一些问题。
首先,您使用setTag()而不是setText(),因此该值永远不会更新。
tv.setTag(String.valueOf(swaptime));
其次,你在onCreate()中获得一次uptoMS,然后在每个“处理程序循环”中使用它。我不知道你想要取得什么,但这与你想要的不同。
第三,您立即重新发布Runnable,因此主线程的消息队列将忙碌。你应该给予一些休息而不是即时重新发布。例如,您可以在更新之间等待100毫秒,因此TextView将每秒更新10次。
handler.postDelayed(this, 100);
最后,不过其他人建议您使用Timer,只需忽略它们。 Handler是实现此类任务的Android方式。