2016-04-27 82 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_方法中(可能在其他類中)。 –