2013-11-16 4 views
0

Не могу понять, почему мой CountDownTimer не будет запущен. Я вижу, что при инициализации переменных таймера mCountdownInterval и MMillisInFuture правильно, когда я вызываю start, и mStopTImeInFuture, похоже, увеличивается.CountDownTimer не будет работать

Я создал переменную time_up, чтобы попытаться установить, когда время увеличивается и истекло.

Я создаю класс MyCount.

public class MyCount extends CountDownTimer { 

public byte time_up; 

public MyCount(long millisInFuture, long countDownInterval) { 
    super(millisInFuture, countDownInterval); 
} 

@Override 
public void onFinish() { 
    time_up=1; 
} 

@Override 
public void onTick(long millisUntilFinished) { 


    time_up=1; 

} 
} 

Затем осуществлено в MainActivity.

package com.example.myapplication; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

private MyCount timer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    timer = new MyCount(10000,250); 

    timer.time_up =0; 

    timer.start(); 

    while(timer.time_up==0); 

    timer.time_up=0; 

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 
+0

Что вы пытаетесь достичь здесь? Таймер запускается в другом потоке, поэтому доступ к этой переменной вообще не синхронизируется. –

+0

while (timer.time_up == 0); --- Не может быть хорошо. –

+0

Мне нужно сделать простой таймер, чтобы ждать ответа от линии связи USB. Если ответ не получен в течение определенного периода времени, мне нужно создать тайм-аут. Я, хотя CountDownTImer мог это сделать, очевидно, нет. Любой другой способ создать фоновый таймер, который может установить переменную, когда произойдет мой тайм-аут? – user1895526

ответ

0

Два замечания: 1. не пользователь byte для флагов, то есть то, что boolean для. 2. CountDownTimer.onTick() запускается в потоке пользовательского интерфейса, который блокируется вашим циклом while(timer.time_up==0);, так что он не может работать. Удалите цикл while и напечатайте несколько операторов журнала в onTick() и onFinish().

Смежные вопросы