[英]Java, what do you call this? and why )};
我正在研究Hello Android(Android PDF /教程),現在已經看過幾次這種語法了。 有人可以告訴我定義運行Runnable時使用什么Java語法嗎?
private class AndroidBridge {
public void callAndroid(final String arg) { // must be final
handler.post(new Runnable() {
public void run() {
Log.d(TAG, "callAndroid(" + arg + ")" );
textView.setText(arg);
}
...
代碼是否定義了Runnable對象並覆蓋了它的run方法?
.post
方法需要一個Runnable對象,該對象在您的代碼示例中被匿名聲明並作為參數傳遞。
這將為長時間運行的進程啟動一個新線程。
線程構造函數需要一個Runnable
對象,該對象具有一個run
方法,該方法在線程准備就緒時被調用。
當許多Java應用程序啟動時,所有操作(包括UI)都堆積在一個線程上。 如果執行“繁重”操作,我主要使用線程來避免凍結UI。
您已經看到了這種情況,當您單擊“執行”之類的東西時,UI突然變得反應遲鈍。 這是因為當前線程沒有足夠的資源來構建UI並執行“執行”所要求的任何操作。
因此,有時這是在其他線程上的其他地方完成的,這需要一個Runnable
對象。
值得注意的是,眾所周知,多線程(您故意在其中創建多個線程)很難使用,主要是出於調試原因,IMO。 但這當然是有用的工具。
正如Dave Newton所指出的,這是一個實現Runnable
接口的匿名內部類。
至於為什么要使用它,可以將其視為各種語法糖。 您會注意到,在您的示例中, run()
的代碼run()
訪問與定義匿名內部類本身相同的作用域。
這簡化了對這些成員的訪問,就好像您在外部定義該類一樣,您必須傳遞對要調用/使用其成員的任何對象的引用。
實際上,IIRC實際上就是Java編譯匿名內部類時發生的情況。 如果存在對外部包含類的引用,則編譯器將創建一個構造函數,該構造函數傳入對外部包含類的引用。
該代碼定義了一個匿名內部類,該類實現了Runnable接口,並實現了run方法以執行適當的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.