我不能让myHandler运行

时间:2014-05-23 11:34:35

标签: android handler android-handler

我想要做的只是处理程序示例的基本实现。我在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);


        }
    };
}

3 个答案:

答案 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方式。