Я пытаюсь реализовать представление с текстовым представлением, подсчитывая число каждые 600 миллисекунд и динамически отображая число в текстовом представлении.OnCreate вызывается дважды при использовании CountDownTimer в Android
Проблема: действие вызывается как ожидалось, но во время обратного отсчета активность снова создается и обратный отсчет начинается с начала. Метод OnCreate() в моей активности вызывается дважды, хотя его нужно вызывать один раз. Я знаю, что это может быть вызвано изменением ориентации экрана и другими изменениями конфигурации, но, похоже, это не происходит.
OnCreate() в моей деятельности:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.SqueezeLayout);
countdownTextView = (TextView)FindViewById(Resource.Id.countdown_text_view);
Timer myTimer = new Timer(18000, 600, this);
myTimer.Start();
}
Моя реализация CountDownTimer:
class Timer : CountDownTimer
{
public int count = 30;
SqueezeActivity squeezeActivity;
public Timer(long totaltime, long interval, SqueezeActivity activity)
: base(totaltime, interval)
{
squeezeActivity = activity;
}
public override void OnTick(long millisUntilFinished)
{
count--;
String countStr = count.ToString();
squeezeActivity.countdownTextView.Text = countStr;
}
public override void OnFinish()
{
squeezeActivity.StartActivity(typeof(AnotherActivity));
}
}
Я новичок в разработке Xamarin так пожалуйста прощает :) Спасибо.
Посмотрите на это, я думаю, что ваша проблема может быть связана с ней: http://stackoverflow.com/questions/3588682/is-it-normal-for-the-activity-oncreate-method- to-be-called-multiple-times – Nestoraj
Интересно, как вы смогли создать этот код и запустить его, поскольку вы не реализовали метод OnFinish() CountDownTimer. OnTick() и OnFinish() должны быть реализованы при переопределении класса CountDownTimer. – sJy
@Nestoraj, я прочитал этот пост. Они предлагают отложить поток, на котором работает таймер, но я не могу отложить, потому что я реализую своего рода метроном, это должно быть точным. Я просто попытался запустить свой таймер в отдельном потоке с помощью следующего кода: 'System.Threading.Thread thread = new System.Threading.Thread (новый ThreadStart (runner.StartTimer));' и 'thread.Start();' но результаты те же. После небольшой отладки я обнаружил, что активность воссоздается после запуска таймера. Я не нашел ничего полезного в документации для Android. Я буду продолжать смотреть. – user1743439