如何在不使用CountDownTimer的情况下创建倒计时时钟

时间:2011-05-13 23:56:18

标签: android timer countdownevent

所以基本上我认为我已经尝试过使用CountDownTimer处理这个问题的所有方法,但我得到的最好的还不够好。我试图做的就是为游戏应用程序显示一个倒计时器,一旦时间到达0就开始一个活动(startActivity),我从那里得到它。在我得到“只使用CountDownTimer”之前,我会说我已经让它几乎完美地工作了。 CountDownTimer setText每秒都会进入一个视图,甚至在它达到0时启动活动,但是你应该在计时器启动后点击后退按钮,它会继续运行(16000毫安)并强制关闭应用程序,我假设是因为countdowntimer没有在onPause和onStop上取消它的方法。

现在我听说过使用处理程序和使用timertasks的计时器。每个人似乎都说他们有正确的“取消();”或“removeCallback”方法。然而,我无法看到任何有这方面的例子。

所以总结一下,我可以使用你的帮助,至少告诉我你(你所有才华横溢的程序员)会怎么做。长话短说,能够在时钟达到0时启动活动,但随时可以取消。

在将我的应用程序推向市场之前,这是我需要做的最后一件事。 先谢谢你们。

2 个答案:

答案 0 :(得分:2)

在执行启动的活动中:

public class YourActivity extends Activity {
private Runnable runnable = new Runnable(){
    @Override
    public void run() {
        startActivity(new Intent(YourActivity.this, YourOtherActivity.class));
    }};
private Handler handler = new Handler();
@Override public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.linearlayoutwithbutton);
    Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            stopTimer();
        }
    });
        startTimer();
}
    private void startTimer(){ handler.postDelayed(runnable, 16000); }
    private void stopTimer(){ handler.removeCallbacks(runnable); }
}

linearlayoutwithbutton.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearlayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <button android:id="@+id/button1" 
            android:text="Cancel" />
</LinearLayout>

答案 1 :(得分:0)

您可以通过覆盖onStop()功能取消Countdowntimer。

@Override  
    protected void onStop()        
{

        super.onStop();  
        countdowntimer.cancel();  
}