簡體   English   中英

Java,您怎么稱呼它? 以及為什么)};

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM