2016-07-05 2 views
0

Я разрабатываю приложение для Android и в том, что у меня есть countdown timer какой onFinish() делает это -расписанию таймер не работает

double initial_time = 0.0; 
double countup; 

public void onFinish() { 
        startTimer(); 
       } 

     public void startTimer(){ 
     //Start the scheduled timer 
     Log.d("hi","crash app 0"); 
     Early_Delay_Display.setText(R.string.Departure_Delay); 
     rootView.invalidate(); 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(
       new java.util.TimerTask() { 
        @Override 
        public void run() { 
         Log.d("hi","crash app 1" + initial_time); 
         countup = 0.0 + initial_time; 
         Log.d("hi","crash app 2" + initial_time + "---------" + countup); 
         Early_Delay_Time.setText(String.valueOf(countup)); 
         rootView.invalidate(); 
         initial_time = initial_time + 0.5; 
        } 
       }, 
       1000, 30000//delay,period 
     ); 
    } 

В основном с помощью этого таймера, я хочу, чтобы отобразить 0.5,1.0,1.5 за каждые 30 секунд но приложение падает.

Логи -

crash app 0 
crash app 1 0.0 
crash app 2 0.0---------0.0 

После этого приложение падает

+0

Можете ли вы, пожалуйста, вставить журнал? –

+0

Журналы уже есть – Samuel909

+0

Он говорил об Журнале ошибок - stacktrace ... – Fildor

ответ

0

Там находится в андроида специальный CountDownTimer, так что вы можете использовать его, как упомянуто here

+0

Мой вопрос не о таймере обратного отсчета. Речь идет о таймере, который отличается от таймера обратного отсчета. Мой таймер обратного отсчета хорошо работает – Samuel909

+0

@ Samuel909 почему вы это делаете onFinish()? в чем смысл? Я предполагаю, что вы просматриваете представление, которое уже было уничтожено: rootView – Silwester

0

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

0

Я узнал ответ. Вы никогда не сможете обновить пользовательский интерфейс из потока. Вместо этого вы можете это сделать -

public void startUpCounting(){ 
     //Start the scheduled timer 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new TimerTask() { 
      public void run() { 
       countup = 0.0 + initial_time; 
       Log.d("hi","crash app 2" + initial_time + "---------" + countup); 
       mHandler.obtainMessage(1).sendToTarget(); 
       initial_time = initial_time + 0.5; 
      } 
     }, 0, 1000); 
    } 

    public Handler mHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      Early_Delay_Time.setText(String.valueOf(countup)); 
      rootView.invalidate(); 
     } 
    }; 
Смежные вопросы