精华内容
下载资源
问答
  • 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的回调方法

    千次阅读 2018-04-23 16:10:33
    回调方法栗子: 经理出差前要你去办一件事情,这件事情通过doSomething告诉你了,事情要是办完了就通过phoneCall通知她一声 这里的phoneCall我们就称之为回调方法 满足回调的2个基本条件: 1.ClassA 调用 ClassB...

    回调方法栗子: 经理出差前要你去办一件事情,这件事情通过doSomething告诉你了,事情要是办完了就通过phoneCall通知她一声 这里的phoneCall我们就称之为回调方法
    满足回调的2个基本条件:
    1.ClassA 调用 ClassB中的X方法
    2.ClassB中的X方法执行过程中调用ClassA中的Y方法完成回调

    //该类用来模拟经理类
    public class Manager {
    
        public Manager(Personel personel) {
            personel.doSomething(this, "整理公司文件");
    
        }
    
        // 当员工做完经理让他做的事后就通过该方法通知事情结果
        public void phoneCall(String result) {
            System.out.println("事情" + result);
        }
    }
    //该类用来模拟员工类
    public class Personel {
    
        public void doSomething(Manager manager,String task) {
            //总经理通过doSomething方法告诉员工要做什么
            System.out.println("经理要你做"+task);
    
            String result="搞定了";
    
            //当事情做完了我们就通过经理公布的phoneCall方法通知结果
            manager.phoneCall(result);
        }
    
    }
    
    public class Test{
    
        public static void main(String[] args) {
            //首先需要一个员工
            Personel personel=new Personel();
            //其次把这个员工指派给经理
            new Manager(personel);
        }
    
    }
    Console:
    经理要你做整理公司文件
    事情搞定了
    展开全文
  • handleOpenURL 回调方法不调用

    千次阅读 2016-08-19 15:37:57
    handleOpenURL 回调方法不调用

    handleOpenURL 回调方法不调用


    以前做分享、和第三方登录的时候,没发现收不到系统回调方法。最近项目做这个功能时,微博sso授权和QQsso授权返回APP时,总是不见在appdelegate调用系统回调方法。就是下面这个:

    -(BOOL)application:(UIApplication *)application openURL:(NSURL     *)url sourceApplication:(NSString *)sourceApplication annotation:    (id)annotation{
    BOOL result = [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil];
    if (result == FALSE)
    {
        //调用其他SDK,例如支付宝SDK等
        NSLog(@"添加了系统回调,在appdelegate类里");
        result = [Pingpp handleOpenURL:url withCompletion:nil];
     }
        return result;
      }

    然后就不停对照友盟的开发文档,发现自己的配置都没有错误啊, 自己分别检查了:

    • 友盟的appkey, 微信的appid、appsecrt、新浪微博的回调地址
    • 又检查了 info.plist 的白名单,如下图


      没错啊, 这些都是粘的友盟的
    • 最后检查了,URL Scheme所有的配置都没有问题

    最后打开系统方法发现下面的方法, 试过之后果然调用了:OK!问题解决了 

    -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
    BOOL result = [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil];
    
    if (result == FALSE){
        //调用其他SDK,例如支付宝SDK等
        NSLog(@"添加了系统回调,在appdelegate类里");
        result = [Pingpp handleOpenURL:url withCompletion:nil];
    
    }
    return result;
    }

    最后总结:iOS9以后, 上面两个方法可能都要调用, 以前只调最上面哪一个方法,哈哈,终于解决了……

    展开全文
  • java多线程回调方法的理解

    万次阅读 2016-09-12 13:07:42
    java多线程使用回调方法的一个例子,可以加深对java多线程的回调方法的理解

    Java多线程回调方法的理解

     

     

    所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时候反过来调用C中的某个方法B,对于C来说,这个B便叫做回调方法。


    下面看一个实际例子来理解:

    本示例设置一个提问者,一个回答者,而回答者需要回答提问者一个很深奥的问题时,这时需要很多时间去查找,提问者又开始做其他的事情,

    等回答者找到答案后,再把答案告诉提问者。


    一.提问者的类

    涉及到长时间的思考,要sleep,要继承Thread

     

    package com.xykj.thread;
    public class XiaoZhang extends Thread {
        // 回答1+1,很简单的问题不需要线程
        public int add(int num1, int num2) {
           return num1 + num2;
        }
     
        // 重写run方法
        @Override
        public void run() {
           // 回答地球为什么是圆的
           askquestion();
           super.run();
        }
     
        // 回调接口的创建,里面要有一个回调方法
        //回调接口什么时候用呢?这个思路是最重要的
        //
       
        public static interface CallPhone {
           public void call(String question);
        }
     
        // 回调接口的对象
        CallPhone callPhone;
     
        // 回答地球为什么是圆的
        private void askquestion() {
           System.err.println("开始查找资料!");
           try {
               sleep(3000);// 思考3天
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
           // 把答案返回到回调接口的call方法里面
           if (callPhone!=null) {//提问者实例化callPhone对象,相当于提问者已经告诉我,我到时用什么方式回复答案
               //这个接口的方法实现是在提问者的类里面
               callPhone.call("知道了,!!!~~~~百度有啊");
           }     
        }
    }
     



    二.提问者的类



    package com.xykj.thread;
    import com.xykj.thread.XiaoZhang.CallPhone;
    public class MainClass {
        /**
         * java回调方法的使用
         * 实际操作时的步骤:(以本实例解释)
         * 1.在回答者的类内创建回调的接口
         * 2.在回答者的类内创建回调接口的对象,
         * 3.在提问者类里面实例化接口对象,重写接口方法
         * 2.-3.这个点很重要,回调对象的实例化,要在提问者的类内实例化,然后重写接口的方法
         * 相当于提问者先把一个联络方式给回答者,回答者找到答案后,通过固定的联络方式,来告诉提问者答案。
         * 4.调用开始新线程的start方法
         * 5.原来的提问者还可以做自己的事
         * */
        public static void main(String[] args) {
           // 小王问小张1+1=?,线程同步
           XiaoZhang xiaoZhang = new XiaoZhang();
           int i = xiaoZhang.add(1, 1);//回答1+1的答案
     
           // 问小张地球为什么是圆的?回调方法的使用
           //这相当于先定好一个返答案的方式,再来执行实际操作
          
           // 实例化回调接口的对象
           CallPhone phone = new CallPhone() {
               @Override
               public void call(String question) {
                  //回答问题者,回答后,才能输出答案
                  System.err.println(question);
               }
           };
          
           //把回调对象赋值给回答者的回调对象,回答问题者的回调对象才能回答问题
           xiaoZhang.callPhone = phone;
          
           System.out.println("交代完毕!");
           //相关交代完毕之后再执行查询操作
           xiaoZhang.start();
          
           //小王做自己的事!
           System.out.println("小王做自己的事!");
        }
     
    }

     

     

    运行结果:




    可以看到:肯定是要提问者先交代完回答者怎样的方式回答问题,

    然后提问者再做自己的事,回答者开始思考答案。

    这里交代联络方式具体表现就是在提问者的类里面实例化回调接口和实现回答的方法。

     

     其中大部分解释都在代码中有体现了。

     

     

    展开全文
  • 回调方法及invoke、begininvoke理解

    千次阅读 2018-06-17 10:18:28
    回调方法 class小明的方法Hello()调用class大头的方法world(),方法world( )又调用小明的方法Hello()………………,这不是成死循环了,显然回调不是这样搞的。 classA的方法first()调用classB的方法second(),而...
  • Java回调方法

    万次阅读 2011-07-11 17:35:43
    回调方法是把功能定义和功能实现分离的一种手段,是一种松耦合的设计思想。 Android中的控件响应就是利用了回调方法。话不多说,直接上代码。 回调方法的接口: public interface ICallBack { // 回调方法 ...
  • shareSDK不进回调方法

    千次阅读 2017-01-16 10:39:36
    问题:模拟器上运行进回调方法,真机测试的时候,取消分享进回调方法,但是成功不进回调方法。 解决: appdelegate中 : [ShareSDKConnector connectWeChat:[WXApi class] delegate:self]; 支付的处理 -(void)...
  • 钉钉事件回调服务端回调方法编写

    千次阅读 2020-05-23 15:58:31
    代码地址:https://github.com/opendingtalk/eapp-isv-quick-start-java/blob/master/src/main/java/com/controller/CallbackController.java package ...找了半天的回调方法,最后是通过加解密文档找到的,啧啧。
  • 9 生命周期回调方法对于Spring bean来讲,我们默认可以指定两个生命周期回调方法。一个是在ApplicationContext将bean初始化,包括注入对应的依赖后的回调方法;另一个是在ApplicationContext准备销毁之前的回调方法...
  • Android java回调机制与自定义接口回调方法 发表于 2015-04-15 | 分类于 Android学习  | 摘自:...
  • jquery的get、post方法错误回调方法

    万次阅读 2018-05-03 10:32:09
    jquery的get、post方法错误回调方法: 解决方法:http://www.yayihouse.com/yayishuwu/chapter/1228
  • 对于回调方法,没有参考官方的解释。参考了网络上的一些解释,觉得大概是指这个一个意思:首先,要有两个程序A、B或者两个类A、B。其中,假设A程序为了方便B程序调用自身的资源,从而预留了一个方法 C,这个方法 C ...
  • 那普通接口有回调方法吗,普通类有回调方法吗, 回调方法是如何定义的
  • Layui弹出层的几种回调方法解析

    千次阅读 2020-04-05 17:26:42
    前段时间忙于工作,有很多需要总结和深究的一些...success的回调方法是弹出层成功弹出之后就会执行的回调方法,它不管你的弹出层内的内容是否成功显示,只要是弹出层能成功弹出,就会执行success方法。有兴趣的可...
  • swift 类回调方法/回调函数

    千次阅读 2017-11-09 18:46:46
    // A类代码 class A{ func huidiao(){ let tag:String = "XunDianGuanLiControlle" // 数据处理的B类型 let UIPickerViewPL = B()... // 设置数据,传tag(tag是自定义的,可传可不传),getValueClosure 这个方法是必
  • Activity 生命周期回调方法详解

    千次阅读 2016-11-22 22:02:40
    Activity是Android中最最重要的四大组件之一,其生命周期回调方法更是重中之重,只有完全理解完全掌握才能更优雅的使用Activity。这篇文章实例演示各种情景下的Activity生命周期回调方法,相信对你有所帮助O(∩_∩)O...
  • java中接口实现回调方法

    千次阅读 2017-12-25 02:55:35
    在学习过程中,看Java源码时,经常出现一个词就是回调方法,网上查看别人解释,五花八门,看得人云里雾里,通过揣摩理解,在这里我来说一说我的理解。 一、回调方法概念 举例说明 图中是这么个场景,类A实现...
  • Java 简单理解回调与回调方法

    千次阅读 2018-03-04 10:34:14
    什么是回调?软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用...
  • Unity3D IK回调方法OnAnimatorIK不执行

    千次阅读 2017-05-16 17:32:16
    问题:Unity3D IK回调方法OnAnimatorIK不执行 解决方法:回调方法OnAnimatorIK(int layerIndex)所在脚本挂载的游戏对象上的Animator文件中的层,需要打开IK Pass设置。
  • 介绍Activity生命周期、回调方法及其常见调用顺序及Activity状态详解   Activity概述 Activity是Android组件中最基本也是最为常见用的四大组件(Activity活动,Service服务,Content Provider内容提供...
  • 调用回调方法有返回值的情况

    千次阅读 2016-05-05 17:59:18
    调用回调方法时,有数据返回,代码反映: 1,定义一个接口 public interface VolleyCallBack {  void onSucc(String response); } 2, 这是请求数据的  public void sendString(final VolleyCallBack ...
  • Android Fragment 生命周期及回调方法

    千次阅读 2019-03-05 23:11:31
    Android Fragment 生命周期及回调方法 1.概述 基本概念:Fragment,简称碎片,片元。是Android 3.0(API 11)提出的,为了兼容低版本,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6。 support-v4库...
  • Camera中的一些回调方法

    千次阅读 2016-05-30 15:59:06
    1. Camera.PictureCallback() ,图像捕获回调,是一种最安全的回调方法, 它确保会被调用,并且在压缩图像时被调用。 2. Camera.PreviewCallback(),定义了onPreviewFrame(byte[] data, Camera camera) 方法,当...
  • Activity的7个回调方法

    千次阅读 2016-05-22 14:45:30
    Activity 类中定义了七个回调方法,覆盖了活动生命周期的每一个环节,下面我来一一介绍下这七个方法。 1. onCreate()这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动第一次被创建的时候...
  • iOS第三方微信登录时不走回调方法

    万次阅读 2016-09-21 17:56:49
    -(void)onResp:(BaseResp*)resp 回调方法不走,无法判断是否成功 查看网上一些解决方法,自己尝试了一下可行。 就是在APPDelegate中,把之前根据demo设置的delegate:self改为调用微信登录的那个控制器...
  • Layer success 层弹出后的成功回调方法

    千次阅读 2019-12-18 19:16:46
    Layer success 层弹出后的成功回调方法 在表格操作行点击查看按钮,弹出框显示这一行的某个字段[content]信息。 【法一】、在链接后面传id,在方法中查出这条信息,把整条信息通过tp5的assign()传到前端,显示在...
  • 其实这三者之间没什么可区分的,因为他们是不同领域的概念。但是他们非常相似都是在抽象的定义了方法...2.回调方法,是固定一个方法外观,java中通过接口实现。 3.钩子方法,是一个抽象类提供空实现,子类进行选择性重
  • python 回调函数和回调方法的实现

    千次阅读 2014-11-28 18:39:58
    回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击...
  • 在Ajax回调方法中通过window.open方法下载文件被浏览器拦截的解决方法问题描述最近做一个导入导出的功能,需求是在Ajax中调用查询接口查出日志信息,生成Excel文件,放在tomcat目录下,然后在ajax回调方法中再使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 903,221
精华内容 361,288
关键字:

回调方法