精华内容
下载资源
问答
  • Java回调方法(CallBack)

    万次阅读 2021-03-18 09:30:25
    一、前言 在进行应用开发时,不同模块之间存在着相互调用的关系。...回调的机制是: a) 类A的a()方法调用类B的b()方法 b) 类B的b()方法执行完毕主动调用类A的callback()方法 二、例子简介 实现一个

    一、前言

    在进行应用开发时,不同模块之间存在着相互调用的关系。调用的方式分为以下几种:

    1. 同步调用
      fun(a)调用fun(b)fun(a)等待fun(b)执行完后再进行下一步。
      同步调用会引起代码的阻塞。

    2. 异步调用
      fun(a)调用fun(b), fun(a)不等待fun(b)执行完便进行下一步。
      常见的有Thread、Task等。

    3. 回调
      回调的机制是:
      a) 类A的a()方法调用类B的b()方法
      b) 类B的b()方法执行完毕主动调用类A的callback()方法

    二、例子简介

    实现一个最常见的功能:文件下载。当然这儿的下载不是真正的下载。
    在下载的过程中,服务端可以返回给我们一些信息,比如:下载进度、下载状态、查看下载URL等。

    三、代码实现

    1. 接口定义

    首先定义一个IDownloadStatusCallBack 接口,接口里面包含用户需要得知的信息,即:开始下载、结束下载、显示下载的URL、显示下载的进度。

    package com.example.test.callback;
    
    public interface IDownloadStatusCallBack {
    	
    	public void startDownload();
    	public void stopDownload();
    	public void showDownloadURL(String url);
    	public void showDownloadProgress(int progress);
    }
    
    
    2. 客户端定义

    定义一个Client客户端,并实现这些接口并打印相应的信息。

    package com.example.test.callback;
    
    public class Client implements IDownloadStatusCallBack {
    	
    	private Server mServer = null;
    	
    	public Client() {
    		// TODO Auto-generated constructor stub
    	}
    	
    	public void download(String url) {
    		mServer = new Server(Client.this, url);
    		mServer.Run();
    	}
    
    	@Override
    	public void startDownload() {
    		// TODO Auto-generated method stub
    		System.out.println("startDownload");
    	}
    
    	@Override
    	public void stopDownload() {
    		// TODO Auto-generated method stub
    		System.out.println("stopDownload");
    	}
    	
    	@Override
    	public void showDownloadURL(String url) {
    		// TODO Auto-generated method stub
    		System.out.println("Download URL: " + url);
    	}
    
    	@Override
    	public void showDownloadProgress(int progress) {
    		// TODO Auto-generated method stub
    		System.out.println("DownloadProgress: " + progress + "%");
    	}
    
    }
    
    
    3. 服务端定义

    定义一个Server服务端,Server是对模拟下载过程的具体实现。
    Server里面用定时器模拟下载进度,每隔1秒下载进度增长百分之十,到百分之百下载结束。
    在执行过程中,通过IDownloadStatusCallBack 回调通知客户端下载进度等信息。

    package com.example.test.callback;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class Server {
    
    	private IDownloadStatusCallBack iCallBack;
    	private String mDownloadUrl = null;
    	
    	private Timer mTimer = null;
    	
    	private int mProgress = 0;
    	
    	public Server(IDownloadStatusCallBack iCallBack, String url) {
    		this.iCallBack = iCallBack;
    		this.mDownloadUrl = url;
    		mProgress = 0;
    	}
    
    	public void Run() {
    		iCallBack.showDownloadURL(mDownloadUrl); // 回调下载URL
    		iCallBack.startDownload();               // 回调开始下载
    		
    		mTimer = new Timer();
    		mTimer.schedule(new TimerTask() {
    			
    			@Override
    			public void run() {
    				// TODO Auto-generated method stub
    				iCallBack.showDownloadProgress(mProgress); // 回调下载进度
    				if (mProgress == 100) {                    // 下载进度至100%
    					iCallBack.stopDownload();              // 回调下载结束
    					mTimer.cancel();
    				}
    				mProgress += 10;
    			}
    		}, 0, 1000);
    	}
    }
    
    
    4. 用户调用

    最后建立一个User用户,用户通过调用Client里面的download()方法来执行下载任务。

    package com.example.test.callback;
    
    public class User {
    	
    	private static final String URL = "https://www.baidu.com";
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Client client = new Client();
    		client.download(URL);
    	}
    
    }
    
    
    5. 数据打印

    执行代码看到打印:

    Download URL: https://www.baidu.com
    startDownload
    DownloadProgress: 0%
    DownloadProgress: 10%
    DownloadProgress: 20%
    DownloadProgress: 30%
    DownloadProgress: 40%
    DownloadProgress: 50%
    DownloadProgress: 60%
    DownloadProgress: 70%
    DownloadProgress: 80%
    DownloadProgress: 90%
    DownloadProgress: 100%
    stopDownload
    

    四、后语

    在执行一些通知类的操作时,采用回调比较方便。

    展开全文
  • Java回调方法详解

    2020-08-31 18:46:42
    本篇文章主要介绍了Java回调方法的步骤、回调的例子、异步回调与同步回调、回调方法在通信中的应用等。具有一定的参考价值,下面跟着小编一起来看下吧
  • java回调函数

    2017-08-31 17:08:17
    java回调函数
  • java 回调

    千次阅读 2011-11-15 15:51:10
    1. 什么是回调函数  回调函数(callback Function),顾名思义,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数...
    1.  什么是回调函数
    
        回调函数(callback Function),顾名思义,用于回调的函数。  回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性: 
        1、属于工作流的一个部分;
        2、必须按照工作流指定的调用约定来申明(定义);
        3、他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;    


    2. 回调机制
        回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。


    java回调机制:

    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

     

    同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;

    回      调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;

    异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。


    用Java里的例子:
    package callbackexample;
    public interface ICallBack { //需要回调的方法 public void postExec(); }
     
    另外的一个类:
    package callbackexample; 
    public class FooBar { //组合聚合原则
    private ICallBack callBack; 
    public void setCallBack(ICallBack callBack) 
    { this.callBack = callBack; doSth(); }
     public void doSth() 
    { callBack.postExec(); } }
     
    第二个类在测试类里面,是一个匿名类:
    package callbackexample; 
    public class Test { 
    public static void main(String[] args) 
    { FooBar foo = new FooBar(); 
    foo.setCallBack(new ICallBack() { 
    public void postExec() 
    { System.out.println("在Test类中实现但不能被Test的对象引用,而由FooBar对象调用"); } }); } }
    上诉的代码:
      1.两个类:匿名类和FooBar
      2.匿名类实现接口ICallBack(在test测试的main方法中用匿名类的形式实现)
      3.FooBar 拥有一个参数为ICallBack接口类型的函数setCallBack(ICallBack   o)  
      4.匿名类运行时调用FooBar中setCallBack函数,以自身传入参数  
      5.FooBar已取得匿名类,就可以随时回调匿名类中所实现的ICallBack接口中的方法
     ==================================
    1。首先回调方法的概念与“构造方法”的概念是不一样的,它不是指java中某个具有特殊意义或用途的方法。
    2。称它为方法的“回调”更恰当一些,它是指方法的一种调用方式。任何一个被“回调”的方法,皆可称之为“回调方法” 
    3。方法的回调通常发生在“java接口”和“抽象类”的使用过程中。
    假设有接口名为 ICallBack 其中有方法名为postExec()
    有类Myclass 实现了该接口,也就是一定实现了postExec()这个方法。现在有另一个类FooBar它有个方法 setCallBack(ICallBack callBack) ,并且setCallBack方法调用了callBack的postExec()方法。
    如果现在,我们使用一个Myclass 的实例myClass,将它作为参数带入到setCallBack(ICallBack callBack)方法中,我们就说setCallBack(ICallBack callBack)方法回调了myClass的postExec()方法。 
    


    Java回调

    chendq@startimes.com.cn

     

    接口回调:

    可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。

    观察者模式

    是将观察者和被观察的对象分离开,当被观察的对象产生一定变化的时候, 观察者就会根据哪里产生的变化,产生了变化, 而进行相应的处理.大部分观察着模式是用接口回调的方法来实现的.

    前者是一种体现,后者是一种用前者实现的模式, 相当于后者调用前者,他们两个没有可以比较的地方

     

    接口回调的实例:

     

     
     
    interface IPeople{ void peopleList(); }
    class Student implementsIPeople {
                public voidpeopleList(){ //doSomething… }
    }
    class Test {
                privateIPeople p;//声明接口变量
                Test(IPeoplep){ this.p = p} //实例化,接口变量中存放对象的引用
                method( ){
                p.peopleList();  //接口回调
    }
    main(){
         IPeoplep = new Student();
         newTest(p).method();
    }
    }
     
     
    其他相关主题
    1.内部类:(Thinking In Java)每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了(接口的)实现,对于内部类都没有影响。内部类可以间接的有效地实现了“多重继承”。即是说,内部类允许继承多个非接口类型(类或抽象类)
    Example:(抽象或具体的类,使用内部类实现多重继承)
    class D {    }
    abstract class E {  }
    class Z extends D {
                      EmakeE() return new E() { };}//匿名内部类
    }
     
    2.闭包:(Thinking In Java)是一个可调用的对象,它记录了一些信息,这些信息来自创建它的作用域。与内部类概念相比较,可知,内部类是面向对象的闭包。闭包(JavaEye)是具有闭合作用域的匿名函数,是可以用作函数参数和方法参数的代码块。本质上来说,一个闭包是一块代码,它们能作为参数传递给一个方法调用。
     
    3. 
    
    
    
    

    展开全文
  • 主要介绍了 Java 回调函数深入理解的相关资料,需要的朋友可以参考下
  • 主要介绍了java 回调机制的实例详解的相关资料,希望通过本文的示例能帮助到大家理解使用回调机制,需要的朋友可以参考下
  • Java 回调机制

    千次阅读 2018-07-17 13:33:44
    Java回调机制概述

    回调机制

    概述

    回调是一种常见的程序设计模式,指可以在某个特定事件发生时应该采取的动作。

    实现

    定义2个类Boss类和Employee类,Boss类负责通知Employee类开始工作,Employee类工作完后通过callback回调通知已经完成工作

    在这里插入图片描述

    class Boss {
        public void execute(Employee employee) {
            employee.work();
        }
    }
    
    class Employee {
    
        interface ICallback {
            void notify(String msg);
        }
    
        private ICallback callback;
    
        public void setCallback(ICallback callback) {
            this.callback = callback;
        }
    
        public void work() {
            System.out.println("开始工作");
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            callback.notify("工作完成");
        }
    }
    
    public class Demo {
        public static void main(String[] args) {
    
            Boss boss = new Boss();
            Employee employee = new Employee();
            employee.setCallback(new Employee.ICallback() {
                @Override
                public void notify(String msg) {
                    System.out.println(msg);
                }
            });
            boss.execute(employee);
        }
    }
    

    文档

    展开全文
  • kotlin lambda (kotlin回调和java回调)

    千次阅读 2020-03-21 16:39:13
    kotlin回调和java回调kotlin回调和java回调的对比kotlin的回调java的回调 kotlin回调和java回调的对比 废话不多说,人狠话不多,直接撸代码: kotlin的回调 class A{ fun setListeren(canshu1:Int,mListen: (String...

    1、kotlin回调和java回调的对比

    废话不多说,人狠话不多,直接撸代码:

    kotlin的回调

    class A{
    	fun setListeren(canshu1:Int,mListen: (String?) -> Unit) {
    		//费时的操作-------后调用mListen
    		mListen("回调的内容")//运行到Log.d的传入监听
    	}
    
    }
    
    class B{
    	a:A=A()
    	//为了更直观看到参数和回调的参数,所以多加了参数233,不要的可以省略
    	a.setListeren(233){
    		 Log.d(TAG, "回调内容为:$it")
    	}
    
    }
    

    java的回调

    /**
     * 按钮式回调
     */
    public class B {
        public void bb() {
            new A().setmOnclickListen(new A.ClickCallback() {
                @Override
                public void clickCallback() {
                    Log.d("111", "=返回到这运行=");
                }
            });
        }
    }
    
    
    public class A {
        private ClickCallback mCallback;
        public void aa() {
            new Handler().postDelayed(new Runnable() {
                public void run() {
                    //耗时操作
                    mCallback.clickCallback();//返回到B那里去运行代码
                }
            }, 2000);
        }
        //自定义回调接口
        public interface ClickCallback {
            void clickCallback();
        }
        public void setmOnclickListen(ClickCallback callback) {//构造函数中传callback进来
            this.mCallback = callback;
        }
    
    }
    

    2、Lambda的使用

    我们用java写radiogroup的实现方式为:

    	radiogroup =(RadioGroup)this.findViewById(R.id.encoding);
        radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {            
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                   //这里根据checkedId来判断选择了哪个
                }
            });
    

    下面我们来看看使用Lambda来写:

    //radioGroup是控件RadioGroup的id
    radioGroup.setOnCheckedChangeListener { radioGroup: RadioGroup, checkedId: Int ->
    	//这里根据checkedId来判断选择了哪个
                when (checkedId) {
                    R.id.rb_4 -> {
                        Log.d("11", "选择了样式一")
                    }               
                }
            }
    
    展开全文
  • java回调

    千次阅读 2007-08-21 17:57:00
    回调的定义:软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用...
  • java 回调机制分为:异步回调 同步回调 模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,也是我们在写程序中经常使用的;回调是一种双向的...
  • java 回调函数 实现

    2013-07-24 09:58:44
    java 回调函数 自己模拟实现 使用了接口来完成
  • Java回调~mqtt回调处理中的问题

    万次阅读 热门讨论 2016-08-01 11:19:12
    1. java回调机制 回调方法的理解: 例子:  消防员给出一个电话号码119(这是每个人都知道的,119就相当于Java中的一个接口),并在每一个地方都设置一个发生火灾时的检测装置,如果危急到人们的人生安全时,...
  • 给初学者的java回调demo,有了这篇demo,朋友们能更好地了解java的回调机制,也能手动debug。
  • 一个经典例子让你彻彻底底理解java回调机制

    万次阅读 多人点赞 2013-03-21 23:43:28
    以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反...
  • Java回调机制

    2016-03-06 18:15:01
    Java最简单的接口回调,更详细的同步回调和异步回调见相关博客。
  • 主要介绍了 Java 回调机制(CallBack) 详解及实例代码的相关资料,需要的朋友可以参考下
  • java回调机制实现

    千次阅读 2017-07-14 15:50:47
    java回调机制实现
  • java回调函数-异步回调-简明讲解

    千次阅读 2018-05-14 22:59:25
    java回调函数-异步回调-简明讲解 叙言: 异步回调常用于某些业务需要很长时间处理,但是又需要立刻返回结果,这种情况都需要开辟线程独立处理需要长时间多的业务,也无处理完了,回调回调函数,再去处理与之有关的...
  • 通俗讲解 java 回调函数 callBack 的异步回调 一看就会懂 趣味讲解哦: 先说 这个 callBack , 扒拉很多资料 都说是 回调回调回调 你大爷啊。 根本没说清楚 回调 到底是咋回事。 有的还说 是 什么 ...
  • java回调】同步/异步回调机制的原理和使用方法 回调(callback)在我们做工程过程中经常会使用到,今天想整理一下回调的原理和使用方法。 回调的原理可以简单理解为:A发送消息给B,B处理完后告诉A...
  • 前几天看了一下Spring的部分源码,发现回调机制被大量使用,觉得有必要把Java回调机制的理解归纳总结一下,以方便在研究类似于Spring源码这样的代码时能更加得心应手。  注:本文不想扯很多拗口的话来充场面,我的...
  • Java回调函数理解和应用

    千次阅读 2017-11-03 17:24:48
    Java回调函数理解和应用在未理解之前,一脸懵逼,等我理解之后,发现和Javascript的回调函数原理是一样。 举个例子有个程序员和一个项目经理,XX项目经理向程序员安排任务让程序员去完成,程序员获得任务并记下是XX...
  • 回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。
  • Java回调实现

    千次阅读 2019-07-31 11:27:07
    1.什么是回调 2.回调核心思想 3.案例代码实现 4.后序一、什么是回调 开发过程当中存在某种特殊的业务需求,例如: 描述: 1.老板给员工下达了工作任务之后,就去做其他事情了。(此时此刻,老板不知道需要多长时间...
  • 5分钟理解java回调方法

    千次阅读 2018-04-18 05:25:16
    看到一个场景使用了java回调方法,遂提起兴趣花了时间去了解回调的大概过程。 试着大概想象以下3过程, 1,老师向学生提了一个问题 2,学生花费时间去思考 3,然后学生向老师回答问题。 以上的三个过程 过程...
  • Android java回调机制与自定义接口回调方法 发表于 2015-04-15 | 分类于 Android学习  | 摘自:...
  • Java回调机制是什么意思?

    千次阅读 2017-09-25 09:16:47
    一、Java回调机制是什么意思 Java中的回调机制是什么意思呢?所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。百度百科中对Java回调机制是这样解释的: 软件...
  • java 回调的原理与实现

    千次阅读 2018-12-18 14:29:29
    回调原本应该是一个非常简单的概念,但是可能因为平时只用系统为我们写好的回调的接口了,自己很少实现回调,所以在自己实现回调的时候还是有一点点晕的,现在写这篇文章记录一下,也和大家分享一下怎么写回调接口。...
  • Java回调机制(CallBack)详解

    千次阅读 2018-03-25 00:00:00
    序言Java回调机制(CallBack),初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么...
  • java 回调函数同步、异步调用

    千次阅读 2016-11-25 15:09:42
    回调函数的应用在于确保串行运算时,同时支持并行的处理。... * java回调应用 * @author zh.h * */ public class TestCallBack { public void getIntelRomet(CallBack callBack,String name) throws Ex

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 387,439
精华内容 154,975
关键字:

java回调

java 订阅