2013-09-26 6 views
3

Сегодня что-то странное, что случится, когда я играл со случайным кодом things.My показано ниже,Странно !!, значение TextView обновляется из фонового потока

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final TextView textView = (TextView) findViewById(R.id.txtName); 
     new Thread() { 

      @Override 
      public void run() { 
       for(int i=0; i<100; i++){ 
        textView.setText("Hello I am fine" +i); 
        textView.setTextColor(Color.RED); 
//     Toast.makeText(getApplicationContext(), "Hello I am fine", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }.start(); 
     ((TextView) findViewById(R.id.txtName)).setText("Hello"); 

    } 

Этот код работает отлично, но технически это не должен Не работай. Поскольку мы не можем обновить пользовательский интерфейс из потока, я не могу понять, почему этот код работает. Скажите, пожалуйста, почему этот код работает.

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

Спасибо

+0

Вы должны проверить на ОС Android выше, чем 3,0 –

+0

я попытался на каждой версии, но Ši работает, но технически это не должно работать –

ответ

0

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

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
    textView.setText("Hello I am fine" +i); 
    textView.setTextColor(Color.RED); 
    } 
    }); 

Цитируя Документов

Каждое приложение имеет свой собственный специальный поток, который запускает объекты UI, такие как Просмотр объектов; этот поток называется потоком пользовательского интерфейса. Только объекты, запущенные в потоке пользовательского интерфейса, имеют доступ к другим объектам в этом потоке.

+0

, но этот код работает, что это проблема, но она не должна работать –

+0

@NixitPatel Вам необходимо получите исключение, ваш поток начнется. также почему у вас есть это ((TextView) findViewById (R.id.txtName)). setText («Hello») 'после запуска? – Raghunandan

+0

Да, это начинается, но не исключение –

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