亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android回調機制總結

發布時間:2020-07-10 23:57:52 來源:網絡 閱讀:1169 作者:lapazsj1 欄目:移動開發

Android回調機制
一、回調函數
  回調函數就是一個通過函數 的指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用為調用
它所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的
一方調用的,用于對該事件或條件進行響應。
詳細解釋:
  客戶程序C調用服務程序S中的某個函數A,然后S又在某個時候反過來調用C中的某個函數B,對于C來說,這個B便叫做回調函數。
例如Win32下的窗口過程函數就是一個典型的回調函數。一般說來,C不會自己調用B,C提供B的目的就是讓S來調用它,而且是C不
得不提供。由于S并不知道C提供的B姓甚名誰,所以S會約定B的接口規范(函數原型),然后由C提前通過S的一個函數R告訴S自己
將要使用B函數,這個過程稱為回調函數的注冊,R稱為注冊函數。Web Service以及Java的RMI都用到回調機制,可以訪問遠程服務
器程序。
下面舉個通俗的例子:
  某天,我打電話向你請教問題,當然是個難題,^_^,你一時想不出解決方法,我又不能拿著電話在那里傻等,于是我們約定:
等你想出辦法后打手機通知我,這樣,我就掛掉電話辦其它事情去了。過了XX分鐘,我的手機響了,你興高采烈的說問題已經搞定
,應該如此這般處理。故事到此結束。這個例子說明了“異步+回調”的編程模式。其中,你后來打手機告訴我結果便是一個“回
調”過程;我的手機號碼必須在以前告訴你,這便是注冊回調函數;我的手機號碼應該有效并且手機能夠接收到你的呼叫,這是回
調函數必須符合接口規范。
  JAVA中不允許直接操作指針,那它的回調是如何實現的呢?
  答案:它是通過接口或者內部類來實現的。
  JAVA方法回調是功能定義和功能實現分享的一種手段,是一種耦合設計思想。作為一種架構,必須有自己的運行環境,并且提
供用戶的實現接口。
  1. 定義接口 Callback ,包含回調方法 callback()
  2. 在一個類Caller 中聲明一個Callback接口對象 mCallback
  3. 在程序中賦予 Caller對象的接口成員(mCallback) 一個內部類對象如
  new Callback(){
    callback(){
      //函數的具體實現
    }
  }
  這樣,在需要的時候,可用Caller對象的mCallback接口成員 調用callback()方法,完成回調.。

二、回調機制在Android框架中的使用
  這里有幾個例子:
  1、在Activity中定義了很多生命周期的不同狀態要調用的方法,這些方法都是空實現,系統框架要調用,用戶也要調用來實
現。
    實例(對于Android界面上Button點擊事件監聽的模擬):
    a.定義接口
    public interface OnClickListener {
      public void OnClick(Button b);
    b. 定義Button
     public class Button {
      OnClickListener listener;
      public void click() {
        listener.OnClick(this);
      }
      public void setOnClickListener(OnClickListener listener) {
        this.listener = listener;
      }
     }
    c. 將接口對象OnClickListener 賦給 Button的接口成員
    public class Activity {
      public Activity() {
      }
      public static void main(String[] args) {
        Button button = new Button();
        button.setOnClickListener(new OnClickListener(){
          @Override
          public void OnClick(Button b) {
            System.out.println("clicked");
          }
        });
        button.click(); //user click,System call button.click();
      }
    }
  2、在Activity中定義了很多生命周期的不同狀態要調用的方法,這些方法都是空實現,系統框架要調用,用戶也要調用來實現。
    實例(對于Android界面上Activity的模擬):
    a.定義接口
    public interface Activity{
      public void onCreate();
      .....
      public void onDestory();
    }
    b. Activity接口的實現類MyActivity
    //定義一個類實現Activity接口
    public calss MyActivity implements Activity{
      @Override//實現方法,簡單輸出
      public void onCreate(){
        System.out.println("onCereate");
      }
      .....
      @Override//實現方法,簡單輸出
      public void onDestory(){
        System.out.println("onDestory");
      }
    }
    c.系統運行環境類AndroidSystem
    //系統運行安裝類
    public class AndroidSystem{
      //定義常量

      public static final int CREATE=1;
       ....
      public static final int DESTORY=2;
      //運行方法
      public void run(Activity a,int state){
        switch(state){
        case CREATE:
          a.onCreate;
          break;
        ....
        case DESTORY:
          a.onDestory();
          break;
        }
      }
    }
    d.測試類
     //測試類
     publilc class Test{
      public static void main(String[] args){
        //實例化AndroidSystem
        AndroidSystem system = new AndroidSystem();
        //實例化MyActivity
        Activity a = new MyActivity();
        system.run(a,AndroidSystem.CREAATE);
        ....
        system.run(a,AndroidSystem.DESTORY);
      }
    }
  以上可以看出,接口(系統框架)是系統提供的,接口的實現是用戶實現的,這樣可以達到接口統一,實現不同的效果。
  系統在不同的狀態“回調”我們的實現類,來達到接口和實現的分類。

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英德市| 公安县| 枣庄市| 松溪县| 兴仁县| 嘉峪关市| 东乌| 炉霍县| 大竹县| 泗阳县| 樟树市| 岢岚县| 沅江市| 嘉善县| 长顺县| 义乌市| 乐都县| 洮南市| 河津市| 南宁市| 阿鲁科尔沁旗| 河南省| 宁陕县| 休宁县| 双流县| 松原市| 静乐县| 贵州省| 专栏| 鄂尔多斯市| 石楼县| 闵行区| 东阿县| 梅河口市| 青田县| 龙井市| 宜丰县| 上饶县| 循化| 滨州市| 泸溪县|