2015-07-29 3 views
2

Я новичок в android. Я использовал обработчик для запуска таймера в моем коде. Я пытался сделать таймер, который называет новое намерение, когда время меньше нуля или оно отрицательно. Эта программа дает ошибки Runtime. Я пробовал с 0L в условии. Но программа не работает. Если я использую 0 вместо 0L, если условие, то значение timeToGo продолжает уменьшаться отрицательно. В Game.java нет ошибки, поскольку у нее есть страница по умолчанию для Android. Я думаю, что есть другой способ вызвать намерение в обработчике. Помогите решить эту проблему. СпасибоНевозможно назвать новое намерение использованием Handler

Файл activity_main выглядит следующим образом

package com.example.test; 
import android.support.v7.app.ActionBarActivity; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    TextView tt1; 
    private Handler customHandler = new Handler(); 
    long timeInMilliseconds = 0L,timeToGo=0L,startTime=0L; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tt1=(TextView) findViewById(R.id.textView1); 
     startTime=System.currentTimeMillis(); 
     customHandler.postDelayed(updateTimerThread, 0); 
    } 
    public Runnable updateTimerThread=new Runnable() { 
     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      long timeNow = System.currentTimeMillis(); 
      timeToGo = 30 - (timeNow - startTime)/1000; 
      tt1=(TextView) findViewById(R.id.textView1); 
      tt1.setText(timeToGo+""); 
      if(timeToGo<0L){ 
       Intent intent=new Intent(MainActivity.this,Game.class); 
       finish(); 
       startActivity(intent); 
       } 

      customHandler.postDelayed(this, 0); 
     } 
    }; 

} 
+0

Возможно, столкновение с краной поможет. Добавить 'customHandler.removeCallbacks (null); return; 'just after' startActivity' – Blackbelt

+0

Опубликовать свой лог cat – Lingeshwaran

ответ

1

Чтобы сделать это, вы должны вызвать startActivity() на главном потоке приложения. И не из фонового потока. Для этого измените обработчик:

private Handler customHandler = new Handler(Looper.getMainLooper()); 
+0

После использования этого намерения работает, но приложение зависает и принудительно закрывается через некоторое время. –

+0

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

+0

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

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