Как создать часы обратного отсчета без использования CountDownTimer
В общем, я думаю, что я пытался всеми возможными способами справиться с этим с помощью CountDownTimer, но лучшее, что я получил, было недостаточно. То, что я пытаюсь сделать именно, это отобразить таймер обратного отсчета для игрового приложения, что, как только время достигает 0, запускается действие (startActivity), и я получаю его оттуда. Теперь, прежде чем я получу "просто использовать CountDownTimer", я скажу, что он уже работает почти идеально. CountDownTimer выставляет представление каждую секунду и даже запускает действие, когда оно достигает 0, но если вы просто нажмете кнопку "Назад" после запуска таймера, он продолжит работать в течение (16000 миллис) и принудительно закроет приложение, предполагая, потому что Обратный отсчет не имеет метода, чтобы отменить его ни onPause, ни onStop.
Теперь я слышал об использовании обработчиков и использовании таймеров вместо таймерных задач. Кажется, все говорят, что у них есть правильные "cancel();" или методы "removeCallback". И все же я не могу видеть нигде, где есть пример этого.
Таким образом, заключение о том, где я мог бы использовать вашу помощь, по крайней мере, скажет мне, как бы вы (все вы, замечательные талантливые программисты) поступили. Короче говоря, вы сможете запускать действие, когда часы бьют 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>
Вы можете отменить отсчет времени, переопределив onStop()
функция.
@Override
protected void onStop()
{
super.onStop();
countdowntimer.cancel();
}