2016-04-27 3 views
-1

Вот мой код:не в состоянии понять Runnable в Android

public class MainActivity extends AppCompatActivity { 

    Runnable runnable; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     runnable=new Runnable() { 
      @Override 
      public void run() { 
       Log.i("hello","runnable") ; 
      } 
     }; 
    } 

} 

Почему не печатает журнал? Нужен ли мне обработчик, а затем передать в него исполняемый объект? Выполняется ли метод run() только один раз?

+0

Вы не запустили его. Создать новую тему (runnable) .start(); – Pehlaj

+0

Ваш вопрос не заполнен. сделайте это сначала –

+0

@ P.Rai «Runnable» - это просто интерфейс: вы не можете запустить интерфейс – pskink

ответ

3

В настоящее время вы только что определили свой runnable, но он никогда не будет вызван. Есть несколько способов, как вы можете использовать runnable, например. в потоке или также в обработчике.

Вот пример для волоска, где вы не можете обновить пользовательский интерфейс:

new Thread(runnable).start(); 

Если вам необходимо обновить пользовательский интерфейс, вы должны использовать обработчик вроде этого:

new Handler().post(runnable); // do as soon as possible 
new Handler().postDelayed(runnable, 300); // do it after 300ms 

Обычно это Безразлично «т иметь смысл, но вы можете использовать работоспособной также как своего рода обратный вызов, как это:

runnable.run(); 

runna можно использовать несколько раз, используя три примера выше, несколько раз.

+0

, почему третий способ не имеет смысла? это обычный способ доступа к интерфейсу «Runnable» (как это делают 1-й и 2-й варианты). – pskink

+0

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

+0

Re: «Обычно это не имеет смысла, но ...» Использование «Runnable» в качестве обратного вызова делает смысл _lot_. Но, что _makes_ это обратный вызов, то вызов 'runnable.run()' происходит в некотором _other_ методе (вероятно, в каком-то другом классе) из того, который создал объект Runnable. –

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