【问题标题】:Android chronometer ticks once and stopsAndroid 计时器滴答一次然后停止
【发布时间】:2010-10-26 10:07:32
【问题描述】:

我需要在 10 秒后隐藏一个 TextView。我以为我可以实现一个 Chronometer,当经过的时间大于 10000 毫秒时,我隐藏了 TextView。我的问题是计时器只滴答一次然后停止。知道我错过了什么吗?

Activity ctx = this;
...

private void ShowText(String message)
    {
        txtProceed.setText(message);
        txtProceed.setVisibility(View.VISIBLE);


        chronoHideText = new Chronometer(ctx);
        chronoHideText.setOnChronometerTickListener(new OnChronometerTickListener()
        {
               public void onChronometerTick(Chronometer arg0) {

                  long elapsed = SystemClock.elapsedRealtime() - chronoHideText.getBase();
                  Log.i("Chrono",String.valueOf(elapsed));
                   if (elapsedTime>10000)
                   {
                       txtProceed.setVisibility(View.INVISIBLE);
                       chronoHideText.stop();
                   }
               }
        }
        );

        chronoHideText.setBase(SystemClock.elapsedRealtime());
        chronoHideText.start();

    }

感谢 Janusz 的帮助。现在效果很好的解决方案是:

Handler splashHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                    switch (msg.what) {
                    case 0:
                            //remove SplashScreen from view
                            txtProceed.setVisibility(View.INVISIBLE);
                            break;
                    }
                    super.handleMessage(msg);
            }
    };

    Message msg = new Message();
    msg.what = 0;
    splashHandler.sendMessageDelayed(msg, 10000);

【问题讨论】:

  • 您真的要让您的用户坐在 10 秒 启动屏幕上吗?请不要那样做。
  • 这不是一个启动画面,它是一个信息消息,同时用户继续使用该应用程序。它不会打扰他,它只是屏幕上的一小段文字。

标签: android timer chronometer


【解决方案1】:

您可以使用handler 发送延迟消息。 方法 sendMessageDelayed 使您能够指定时间,在该时间过去后,您将收到一条消息。如果您只需要在经过的时间后做一件事,您可以在 handleMessage 方法中隐藏视图。

这样您就不需要自己测量时间并每隔一秒或一毫秒进行一次计算工作。在 Android 操作系统传递消息之前,您的应用不会占用任何 cpu 时间。

【讨论】:

    【解决方案2】:
    public class ButtonVisibility extends Activity {
    
    Button mButton;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_button);
    
        mButton = (Button)findViewById(R.id.button);
    
        new MyTask().execute(null);
    }
    
    public class MyTask extends AsyncTask<Void, Void, Void> {
    
        @Override
        protected Void doInBackground(Void... params) {
            try {
                Thread.sleep(10000);
            }
            catch(InterruptedException e) {
                Log.e("MyTask", "InterruptedException", e);
            }
            return null;
        }
    
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            mButton.setVisibility(View.INVISIBLE);
        }
      }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多