Android自學曆程—回呼函數的意思(源碼+例子)

來源:互聯網
上載者:User

標籤:

  為什麼會學習回呼函數,那還要從線程說起。雖然以前寫過一篇文章叫做“Android自學曆程—多線程”,現在看看還是太年輕了。

  在學習線程的時候,我試著看了看Handler的源碼,於是對其中的Callback介面產生了興趣。於是補自身不足,拿來學習學習。廢話到此為止,整理思路,一起來學習。

 

下面這是一段Handler的源碼
    /**     * Callback(回收) interface(介面) you can use when instantiating(例示) a Handler to avoid     * having to implement(實施) your own subclass(亞綱) of Handler.     *     * @param msg A {@link android.os.Message Message} object     * @return True if no further handling is desired     */    public interface Callback {        public boolean handleMessage(Message msg);    }        /**     * Subclasses(亞綱) must implement(實施) this to receive messages.    */    public void handleMessage(Message msg) {    }

上面的中文翻譯不是我翻譯的,翻譯軟體乾的好事,沒一個對的。。。

 

Handler相信大家都用過,當我們執行個體化一個Handler時,大家都說我們要實現其中的方法,其實就是實現HandleMessage的方法。

我們再來看看源碼,對此的實現方式。首先是Callback方法的介面,既然是介面,那我們就必須實現其中所有的方法,既“handleMessage”方法。

 

大家再看看上面我用紅色標註的英文,是不是有了感覺,別急。我們再來找個例子看看。

下面是一段OnClickListener的源碼
    /**     * Interface definition for a callback to be invoked when a view is clicked.     */    public interface OnClickListener {        /**         * Called when a view has been clicked.         *         * @param v The view that was clicked.         */        void onClick(View v);    }

 

我們來看一下紅色標註的這段話:當一個View被點擊時,這個介面定義的回呼函數將會被觸發。我們並不會顯示的調用OnClick方法,使用者觸發了這個點擊事件,系統會去調用這個OnClick方法。

我有順路把setOnClickListener的源碼找了過來,可能對後面有助於理解
    /**     * Register a callback to be invoked when this view is clicked. If this view is not     * clickable, it becomes clickable.     *     * @param l The callback that will run     *     * @see #setClickable(boolean)     */    public void setOnClickListener(OnClickListener l) {        if (!isClickable()) {            setClickable(true);        }        getListenerInfo().mOnClickListener = l;    }

 

這裡,我找到一個不錯的教程,能讓我們更好的理解:用代碼,類比註冊事件監聽器

先寫一個監聽器介面

package com.listener;  /**  * 點擊監聽器介面 */  public interface MyOnClickListener {      public void onClick();  } 

 

 

寫一個我們自己的Button類,實現點擊效果。

package com.listener;      `    public class MyButton {      private MyOnClickListener listener;            /**      * 設定具體點擊監聽器      * @param listener 點擊監聽器實作類別      */      public void setOnClickListener(MyOnClickListener listener) {          this.listener = listener;      }            /**      * 按鈕被點擊      */      public void doClick() {          listener.onClick();      }  } 

 

 

最後類比Client端的註冊監聽器和觸發點擊操作。

package com.listener;    publicclass Client {      public static void main(String[] args) {          MyButton button =new MyButton();          //註冊監聽器          button.setOnClickListener(new MyOnClickListener() {                @Override              public void onClick() {                  System.out.println("按鈕被點擊了");                                }                        });          //類比使用者點擊          button.doClick();      }  } 

 

這個我看了有一會,感受一下還是有感覺的。http://blog.csdn.net/jason0539/article/details/10168899

它的評論我截了幾張圖片,還是有不錯的啟發的。

 

 

當然我在知乎也找到了神層級的回答,共用之。

 

好了,大概的瞭解後,我們可以繼續後續的學習了。

 

Android自學曆程—回呼函數的意思(源碼+例子)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.