2011-08-06 59 views
2

我要通過Android記事本教程:http://developer.android.com/resources/tutorials/notepad/notepad-ex2.html將菜單相關事件稱爲「回調函數」是否有意義?

在Notepadv2,第5步,它說:

onListItemClick()是我們覆蓋的回調方法。

我對回調的概念有點新,但從研究中,我的理解是,回調是您在一個進程中提供的代碼,當另一個進程達到某個結果時執行該進程。是什麼讓這個特殊事件成爲回調,而不是其他事件?

這是一個回調,因爲它只在用戶做某事時調用(在這種情況下,點擊一個列表項)?但是,如果是這樣的話,任何事件都不能被認爲是一個回調,因爲只有當它自身以外的事情發生時纔會調用它。或者我錯過了什麼?

回答

1

我的理解是,回調是你在真實運行一個進程提供代碼時,另一個進程達到一定結果

不完全是。

Wikipedia將回調描述爲「對作爲參數傳遞給其他代碼的可執行代碼或一段可執行代碼的引用」。這可能是該術語的最佳用法。在這種情況下,由於Java操作以方法的形式出現,因此「回調方法」是一種將由於回調而調用的方法。

這是一個回調,因爲它只在用戶做某事(在這種情況下,點擊一個列表項)時才被調用?

不完全是。

這是一個回調方法,因爲Android框架的其他部分正在檢測事件(在這種情況下,用戶在列表中的某個項目上點擊)並調用onListItemClick()回調方法來控制。

但是,如果是這樣,不能將任何事件視爲一個回調,因爲它只在外部事件發生時才被調用?

通常情況下,「回調」保留用於檢測事件的模塊與執行回調以處理事件的模塊之間明確定義的不透明邊界的情況。在這種情況下,您沒有編寫Android操作系統,因此onListItemClick()是您自己代碼中的一個回調,操作系統會調用它來處理列表項目單擊。

+0

感謝您幫助我理解這一點。我仍然得不到的是 - 如果回調的要求是傳遞了一段代碼或一段代碼引用,那麼在這種情況下,我在哪裏傳遞該代碼?我不必告訴其他代碼來調用該方法,它將其作爲事件的結果。它是否滿足作爲回調的要求,因爲它是從我自己寫的模塊中調用的,即使我不必將該方法傳遞給其他代碼? – Joseph

+0

再看一下示例代碼,它包括這個 'startActivityForResult(i,ACTIVITY_EDIT);' 我想這個常量是正在傳遞的「引用代碼」嗎?在這種情況下,當外部代碼最終回調時,它會將該常量的值傳遞給'onActivityResult()'(我寫),所以我知道如何解釋它對我的函數的調用? 它實際回調的函數是'onActivityResult()'。這不會讓這個回調?或者這只是一個語義問題? – Joseph

+0

「它是否滿足要求作爲回調,因爲它是從我自己寫的模塊中調用的,儘管我不必將該方法傳遞給其他代碼?」 - 是的。在面向對象編程中,它被稱爲「繼承」。 「我想這個常數是正在通過的」代碼引用「?」 - 沒有。 「它會傳遞這個常數的價值......所以我知道如何解釋它對我的函數的調用?」 - 是的。 「或者這只是一個語義問題?」 - 如果您不喜歡那裏的文檔,歡迎您編寫自己的Android文檔。 – CommonsWare

1

CommonsWare的答案比較完整,但我想我可以簡化一點說明。

A 回調被回叫的東西。從概念上講,您聲明您對某個特定事件感興趣(例如點擊按鈕,某個任務完成時,時間流逝等),並指示您的代碼在發生時致電

這就像拿起電話告訴某人「當你準備好時給我回電話」。回調不會採取電話形式,而可能是函數調用。

你調用一個函數,並把它一回調,而且功能回調回調時不合適。

相關問題