Как создать часы обратного отсчета без использования CountDownTimer - PullRequest
1 голос
/ 14 мая 2011

Так что, в принципе, я думаю, что я попробовал все возможные способы обработки этого с помощью CountDownTimer, но лучшее, что я получил, было недостаточно. То, что я пытаюсь сделать именно, это отобразить таймер обратного отсчета для игрового приложения, что, как только время достигает 0, запускается действие (startActivity), и я получаю его оттуда. Теперь, прежде чем я получу «просто использовать CountDownTimer», я скажу, что я заставил его работать почти идеально уже. CountDownTimer выставляет представление каждую секунду и даже запускает действие, когда оно достигает 0, но если вы просто нажмете кнопку «Назад» после запуска таймера, он продолжит работать в течение (16000 миллис) и принудительно закроет приложение, предполагая, что Обратный отсчет не имеет метода, чтобы отменить его ни onPause, ни onStop.

Теперь я слышал об использовании обработчиков и использовании таймеров вместо таймерных задач. Кажется, все говорят, что у них есть правильные "cancel ();" или методы "removeCallback". И все же я не могу видеть нигде, где есть пример этого.

Итак, заключение о том, где я мог бы использовать вашу помощь, по крайней мере, говорит мне, как бы вы (все вы, замечательные талантливые программисты) поступили. Короче говоря, вы сможете запускать действие, когда часы бьют 0, и в то же время иметь возможность отмены.

Это последнее, что мне нужно сделать перед отправкой приложения на рынок. Заранее спасибо, ребята.

Ответы [ 2 ]

2 голосов
/ 14 мая 2011

В действии, которое выполняет запуск:

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>
0 голосов
/ 12 марта 2012

Вы можете отменить обратный отсчет, переопределив функцию onStop().

@Override  
    protected void onStop()        
{

        super.onStop();  
        countdowntimer.cancel();  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...