2016-04-27 34 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,但它永远不会被调用。有多种方式可以使用可运行的例如在一个线程中或者也在一个Handler中。

这里是一个线程的例子,你不能更新UI:

new Thread(runnable).start(); 

如果您需要更新UI,你应该使用这样的处理程序:

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

通常它不“T有道理,但你可以用你的可运行也作为一种回调是这样的:

runnable.run(); 

一个runna通过多次使用这三个示例,可以多次使用ble。

+0

为什么第三种方法没有意义?这是如何访问'Runnable'接口的正常方式(第一个和第二个选项都是这样做的)。 – pskink

+0

runnable通常用于线程或处理程序。这会起作用,但通常你不会这样做。最后一次调用是在Handler或Thread中完成的,换言之,该调用在框架中使用,通常不在用户代码中。 – rekire

+0

Re,“通常它没有任何意义,但是......”使用'Runnable'作为回调使得_lot_有意义。但是,回调的原因是runnable.run()调用发生在创建Runnable对象的某个_other_方法中(可能在其他类中)。 –