English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Глубокое понимание интерфейсного механизма вызова Android

В начале изучения этой механики я не очень хорошо понимал ее, теперь я хочу重新 организовать свои мысли. В разработке интерфейсный вызов обратной функции — это то, что мы часто используем.

Значение интерфейсного вызова обратной функции в том, что после регистрации не выполняется сразу, а выполняется в определенный момент.

Сначала давайте решим, что такое обратная функция:

Давайте举个例子: однажды я позвонил тебе, чтобы поинтересоваться проблемой, конечно, это была сложная проблема, ты не мог сразу найти решение, и я не мог просто сидеть на телефоне и ждать, поэтому мы договорились: как только ты найдешь решение, позвони мне по телефону, и я повеслю телефон, чтобы заняться другими делами. Через XX минут мой телефон зазвонил, и ты с радостью сказал, что проблема решена, и она должна быть решена так.

 

C не может вызвать b himself, цель предоставления b C — это чтобы S вызывал его, и C не может не предоставлять. S не знает, что такое предоставленный C b, поэтому S согласовывает спецификацию интерфейса b (prototype функции), а затем C заранее через функцию r S сообщает S, что он собирается использовать функцию b (регистрация). r — это функция регистрации.

Кратко говоря: обратная функция — это функция, отведенная для системного вызова, и мы часто знаем, когда эта функция вызывается, поэтому продолжим улучшать上图。

Взглянув на это изображение, давайте подумаем об этом, и мы обнаружим, что в жизни везде есть такое思想. Многие идеи в программном обеспечении на самом деле являются трансформацией нашего стиля мышления в реальной жизни.

Что первое мы делаем, когда пишем ответы на экзамене? Конечно, это пишем номер студента и имя. Обратите внимание, что мы пишем номер студента и имя не для себя (т.е. этот метод не вызывается нами), а для того, чтобы учитель мог зарегистрировать оценки (предоставлен для будущего вызова системы), это и есть применение callback. Учитель предоставляет интерфейс (ввод имени, правила ввода номера студента), и мы используем этот интерфейс для регистрации.

После изучения этого маленького примера у вас должно сложиться некоторое представление о callback, теперь вернемся к примеру в начале статьи.

Этот пример объясняет программный режим "асинхронный + callback". Когда вы后来 звоните мне и говорите результат, это процесс callback; мой номер телефона должен быть вам известен заранее, это регистрация callback-функции; мой номер телефона должен быть действителен, и телефон должен быть способен принимать вызовы, что соответствует спецификации интерфейса callback-функции.

Мы уже大致了解了回调ный процесс, давайте теперь посмотрим на основные случаи использования callbacks в Android.

Сцена 1:

Button button = (Button)this.findViewById(R.id.button);  
button.setOnClickListener(new Button.OnClickListener() {  
  // функциональный callback  
  @override  
  public void onClick(View v) {  
   buttonTextView.setText("Кнопка была нажата");  
  }  
});  

Этот код добавляет списокeners к кнопке, что является одним из наиболее распространенных применений callbacks. Мы не вызываем явно метод onClick. После того как пользователь активирует событие нажатия кнопки, это будет автоматически вызываться Android-системой.

Сцена 2:

@Override  
public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(saveInstanceState);  
  // You code...  
}  
@Override  
public void onResume() {  
  super.onResume();  
  // You code...  
}  

Весь жизненный цикл Activity, по сути, использует функции回调.

Изучив два наиболее часто используемых нами способа回调, давайте сначала подведем итоги основных методов использования回调 в Android. На самом деле, это просто перевод нашей схемы.

--你类--

package lin.callback.test; 
public class You implements Runnable{ 
  private String who; 
   private ContactInterface callBack;  
   public You() { 
      // TODO Автоматически сгенерированный конструктор 
   } 
  //Этот метод означает, что с тобой связался кто-то, зарегистрируй его здесь 
   public void setCallBack(String who, String question, ContactInterface callBack) { 
     this.who = who;   
     System.out.println("Ты сказал: Тот, кто связался со мной, это " + who + " с вопросом " + question); 
     this.callBack = callBack; 
   } 
   public void handleThings(){ 
     //Предположим, что сейчас ты думаешь о ответе на проблему и тебе нужно время 
     for(int i=0;i<100000;i++){  
        if(i == 0){ 
          System.out.println("Ты думаешь о проблеме....."); 
        } 
     } 
     String answer = "答案是A"; 
     //找到了解决问题的方法 
     System.out.println("Ты сказал: Нашел ответ, готов позвонить " + who + " чтобы сказать ему ответ"); 
     callBack.callBackByTel(answer); 
   } 
  /* (non-Javadoc) 
   * @see java.lang.Runnable#run() 
   */ 
  @Override 
  public void run() { 
    try { 
      Thread.sleep(1000); 
      handleThings(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  }  
} 

--Моя класс--

public class Me { 
   public static void main(String[] args){  
     Me me = new Me(); 
     me.hasQuestion(); 
   } 
   private void hasQuestion(){ 
     //现在有问题想不出来答案,想去问你 
     You you = new You(); 
     you.setCallBack("蜗牛", "答案是什么?", new ContactInterface() { 
      @Override 
      public void callBackByTel(String answer) { 
        System.out.println("Я говорю: да, хорошо, я получил ответ: " + answer + " спасибо"); 
      } 
    }); 
    //Ты принимаешь телефонный звонок, встаешь и начинаешь думать о проблеме 
    new Thread(you).start(); 
   } 
} 

--Класс интерфейса (стандарт)--

public interface ContactInterface { 
  public void callBackByTel(String answer); 
} 

Проверка результатов:

Ты говоришь: сейчас ко мне обратился улитка, проблема - что за ответ на这道 вопрос?
Ты думаешь о проблеме
Ты говоришь: я думаю о проблеме, готов вернуться к улитке и告诉她 ответ
Я говорю: да, хорошо, я получил ответ: ответ - A, спасибо

Глубокое размышление о回调:

Фактически программа - это переход кода, независимо от синхронного, асинхронного, отражения интерфейса виртуальной функции, по сути, это вызов функции. Функция, которую мы вызываем, требует указателя на нее, и различные языки получают этот указатель разными способами. А интерфейсы, которые мы определяем, на самом деле являются указателями функций, поэтому процесс регистрации其实就是 присвоение значения этому указателю функции. Вызовим пользовательскую функцию, которую мы определили, через этот указатель функции.

Вот и все, что есть в этой статье, надеюсь, это поможет вам в изучении, также希望大家多多支持呐喊教程。

Заявление: содержание этой статьи взято из Интернета, авторские права принадлежат авторам, материалы предоставлены пользователями Интернета, сайт не имеет права собственности, не был обработан вручную, не несет ответственности за связанные с этим法律责任. Если вы обнаружите спорное содержимое о правах на авторство, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для жалоб,并提供 соответствующие доказательства. При подтверждении факта侵权, сайт незамедлительно удалят спорное содержимое.

Давай посмотри, что еще может тебе понравиться