Android的简单提醒

时间:2010-05-27 01:12:15

标签: android timer

我正在尝试制作一个简单的计时器。

package com.anta40.reminder;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioGroup;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost.TabSpec;

public class Reminder extends Activity{

    public final int TIMER_DELAY = 1000;
    public final int TIMER_ONE_MINUTE = 60000; 
    public final int TIMER_ONE_SECOND = 1000;
    Timer timer;
    TimerTask task;
    TextView tv;

    @Override
    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);
        setContentView(R.layout.main);
        timer = new Timer();

        task = new TimerTask() {

            @Override
            public void run() {
                tv = (TextView) findViewById(R.id.textview1);
                tv.setText("BOOM!!!!");
                tv.setVisibility(TextView.VISIBLE);
                try {
                    this.wait(TIMER_DELAY);
                }
                catch (InterruptedException e){

                }
                tv.setVisibility(TextView.INVISIBLE);
            }

        };

        TabHost tabs=(TabHost)findViewById(R.id.tabhost);

        tabs.setup();

        TabSpec spec = tabs.newTabSpec("tag1");

        spec.setContent(R.id.tab1);
        spec.setIndicator("Clock");
        tabs.addTab(spec);

        spec=tabs.newTabSpec("tag2");
        spec.setContent(R.id.tab2);
        spec.setIndicator("Settings");
        tabs.addTab(spec);

        tabs.setCurrentTab(0);

        RadioGroup rgroup = (RadioGroup) findViewById(R.id.rgroup);
        rgroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == R.id.om){
                    timer.schedule(task, TIMER_DELAY, 3*TIMER_ONE_SECOND);
                }
                else if (checkedId == R.id.twm){
                    timer.schedule(task, TIMER_DELAY, 6*TIMER_ONE_SECOND);
                }
                else if (checkedId == R.id.thm){
                    timer.schedule(task, TIMER_DELAY, 9*TIMER_ONE_SECOND);
                }
            }
        });

    }
}

每次单击一个单选按钮,计时器应该启动,对吧? 但是为什么它没有开始?

1 个答案:

答案 0 :(得分:1)

首先,您无法从后台线程修改UI。因此,您无法从TimerTask修改用户界面。

第二,即使你的“BOOM!”逻辑在主应用程序线程上,你不允许Android做任何事情。 Android的UI是消息和事件驱动的。当您致电setText()setVisibility()时,只有将控制权返回给Android后,它们才会生效。因此,在您的情况下,您将看不到任何内容,因为TextView在变得可见后会立即变为隐形。

第三,如果您确实将代码移动到主应用程序线程,请不要阻止该线程,例如使用wait()调用。