android回调(转自网络)

回调这种思想大家应该都用过,只是很多人不知道那是回调的一种罢了,前几天整理了一下自己对于回调的理解,就顺便把自己的一些想法整理到博客中。

 

让我们从一个小故事开始。

某天,我打电话向你请教问题,当然是个难题,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了 XX 分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。

OK,这个故事我们先告一段落,其实,这就是一个典型的回调过程。

C不会自己调用b,C提供b的目的就是让S来调用它,而且C不得不提供。S并不知道C提供的b是什么,因此S会约定b的接口规范(函数原型),然后由C提前通过S的一个函数r告诉S自己将要使用b函数(即注册)。r为注册函数。

简单来说:

回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机

好的,那我们继续完善下上面的那幅图。

看着这幅图,其实我们回想一下,会发现,生活中到处都有回调这种思想存在。软件的很多思想其实只是我们实际生活中思维方式的一种转化。

再将一个小故事:

我们平时考试答题的第一件事是干嘛?没错,是写上学号和姓名。这里注意了,我们填写学号和姓名不是给自己看的 ( 即该方法不是给自己调用的 ) ,而是给老师登记分数时看的 ( 预留给系统将来调用 ) ,这其实就是一个回调的应用。老师提供接口 ( 输入姓名,学号规则 ) ,我们利用接口注册。
看到上面的小故事,大家对回调就有了一些了解了,我们再回到开头的那个小故事。
那个故事说明了“异步 + 回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。

好的,我们已经大概知道了回调的基本流程,下面,来看看Android中回调的基本使用。

场景一:

[java]  view plain copy
 
  1. Button button = (Button)this.findViewById(R.id.button);  
  2. button.setOnClickListener(newButton.OnClickListener() {  
  3.   
  4. //回调函数  
  5. @override  
  6. publicvoidonClick(View v) {  
  7. buttonTextView.setText("按钮被点击了");  
  8. }  
  9. });  
 
上面的代码给按钮加了一个事件监听器,这其实就是 “ 回调 ” 最常见的应用场景之一。我们自己不会显式地去调用 onClick 方法。用户触发了该按钮的点击事件后,它会由 Android 系统来自动调用。

熟悉的组件,熟悉的监听器。。。

场景二:

[java]  view plain copy
 
  1. @Override  
  2. publicvoidonCreate(BundlesaveInstanceState) {  
  3.   super.onCreate(saveInstanceState);  
  4.  // You code...  
  5. }  
  6. @Override  
  7. publicvoidonResume() {  
  8.   super.onResume();  
  9.  // You code...  
  10. }  

Activity的整个生命周期基本上都说回调函数在发挥作用。

 

好了,看了两个我们经常使用的回调方式,我们先来总结下 android 利用回调的基本方法。其实,只是把我们的那张图翻译了下。
首先,服务器端创建一个回调接口
 
[java]  view plain copy
 
  1. //声明一个接口  
  2. public interface ICallBack {  
  3.     void postExec();  
  4. }  
  5. //另外一个类有方法里面有个参数是这个接口类型的对象  
  6. public class FooBar {  
  7.     private ICallBackcallBack;  
  8.     public void setCallBack(ICallBackcallBack) {  
  9.         this.callBack =callBack;  
  10.     }  
  11.     public void doSth() {  
  12.         callBack.postExec();  
  13.     }  
  14. }  
  15. //实现回调  
  16. public class Test {  
  17.     public static void main(String[] args) {  
  18.         FooBarfoo = newFooBar();  
  19.         foo.setCallBack(newICallBack() {  
  20.             public void postExec() {  
  21.                 System.out.println("method executed.");  
  22.             }  
  23.         });  
  24.         foo.doSth();//调用函数  
  25.     }  
  26. }  
 

对回调的深入思考:

程序的本质就是代码跳转,不管同步异步反射接口虚函数,本质上都是函数调用。函数我们要调用它,就需要它的指针,不同语言通过不同的方式来得到这个指针。而我们定义的接口其实就是一个函数指针,那么那个注册过程,其实就是相当于对那个函数指针赋值。通过这个函数指针来调用我们定义的自实现函数。利用函数指针实现回调,在RIL的C代码中无处不在,大家可有空研习。

Android网络请求回调的实现方式 在Android开发中,实现网络请求回调的方式包括HttpURLConnection和OkHttp。由于在一个app中会使用到很多次网络请求,所以通常情况下会将这些通用的网络操作提取到一个公共的类中,并提供一个通用的方法,当想要发起网络请求的时候,只需要调用这个方法即可 阅读详情

相关推荐

Android回调详解

很多时候开发遇到一些Ui更新 网络数据获取,或者方法方法传递的时候会借助回调函数,那么什么是回调函数 百度百科是这么解释的          回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事

Tamic (大白) 5938

Android之回调函数

最近对Android中的回调产生了一些疑问,看了不少博文才算是明白了一点,接下来分享一下我的收获。 写在正文之前,大神可以跳过:   1.接口不可以实例化,但可以创建一个接口对象。*注1:   2.你可能见过这样的语法: Button bt_add = (Button) findViewById(R.id.bt_add); bt_add.setOnClickListener(new OnCli...

weixin_34396902的博客 1109

Android Studio生命周期回调方法演示

生命周期回调方法演示要求:按照讲课笔记完成,在七个回调方法输出调试信息。

qq_55878784的博客 1473

Android中的接口回调机制

1.回调的含义和用途 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类同步调用、异步调用和回调。同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。异步调用是一种类似消息或事件的机制解决了同步阻塞的问题,例如A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B后,非得等到B走完后,A才继续走。回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,例如A要调用B,B在执行完又要调用A。 回调的思

ChenYiRan123456的博客 2358

Android回调机制:深入解析与示例代码

回调机制是一种异步编程模式,它允许我们在特定事件发生时,通过提供一个回调方法或接口实例,将处理逻辑传递给其他对象进行执行。当事件发生时,系统会调用预定义的回调方法,从而实现特定的行为。在Android开发中,回调机制常用于处理异步任务、事件响应和数据传递等场景。例如,当用户点击按钮时,我们可以通过回调机制处理按钮的点击事件;当网络请求完成时,我们可以通过回调机制获取请求结果并进行相应的处理。回调机制是Android开发中常用的一种设计模式,它可以帮助我们实现异步任务、事件响应和数据传递等功能。

CodeSpark的博客 812

Xutils网络请求与图片处理实用指南

本文还有配套的精品资源,点击获取 简介:Xutils是一个在Android开发中实用的框架,支持网络请求、图片加载和处理等功能。本文详细讲解了Xutils中Post和Get网络请求的操作方法,以及如何加载和上传图片,并展示了如何将Bitmap对象转化为File。通过这些实例,Xutils的强大功能和简便使用被充分展现出来,有助于提升开发效率和用户体验。 1. Xu...

weixin_35732273的博客 1425

Android 浅谈回调

首先,在自定义控件中定义一个回调接口。这个接口将包含一个或多个方法,用于在特定事件发生时被调用。// 回调接口定义// 设置回调接口的方法// 触发事件的方法= null) {callback.onUiChange("新的UI数据");// 其他代码异步通信:回调是处理异步操作的一种常见手段,允许程序继续执行而不必等待操作完成。这在处理网络请求、数据库操作等耗时任务时特别有用。减少耦合:通过回调,可以将事件的产生和处理解耦,提高代码的模块化和重用性。

qq_38788068的博客 2276

android app 文字播放语言功能实现

在 Android 应用中实现文字转语音(TTS)功能可以通过系统自带的API 实现。

1489

Android回调的简单理解

1.什么是回调 回调的定义是在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调,这个定义比较正式,但看起来太绕了,一会A类一会B类,把人绕晕了。 使用日常生活中的例子来理解一下,回调英文单词是Callback,直译为回呼或者回电话,那就用跟电话有...

lansoul1987的专栏 2441

ESP32S3学习——i2c,点亮0.96寸oled

ESP32S3学习——i2c,点亮0.96寸oled

HandBAI的博客 1万+

浅析图像处理中的名词:Gamma 校正(Gamma变换、Gamma调整)

浅析图像处理中的名词:Gamma 校正(Gamma变换、Gamma调整)

qq_51908382的博客 1万+

Android异步获取图片,变成同步线程。---由微信分享小程序说起

Android开发都知道在做微信分享的时候,都需要判断将要展示的图片是否是URL还是Base64的图片资源,前者需要自己去下载一个图片,在转成字节数组的形式;后者可以直接转成字节数组传给微信的参数。 情况一:很多时候我们需要从网上异步下载图片到本地,例如: 之后再转化成字节数组传递给微信的WXMediaMessage。 情况二:如果还有些错误的图片不需要异步线程处理,很快就能有返回。 ...

Goals1989的博客 386

LangChain4j-针对性操作Function-call+系统预设角色

如果我们想要对一些敏感信息进行针对化的操作,不仅仅是接口大模型去进行回复。比如我们现在数据库里面有一些菜品,那么用户提问,店里有多少套餐,那么云端大模型肯定是不知道的,我们希望捕获这些关键字然后进行自己的业务查询或者处理,这个时候就可以使用function-call。

DDDDDouble的博客 454

Android网络编程的最佳实践

Android网络编程的最佳实践

Android应用开发工程师 1166

D457深度相机调试记录(max96712+max9295A)

使用max96712解串器解4路D457相机。采集深度相机Depth和RGB流。

navy2015_163的博客 1265

Google Earth Engine :处理Sentinel-1 GRD SAR数据以估算田间尺度土壤湿度的工作流程(计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB))

本文介绍了利用Google Earth Engine (GEE)处理Sentinel-1 SAR数据估算田间土壤湿度的方法。工作流程包括:定义研究区域并筛选指定日期、轨道参数的Sentinel-1图像;预处理计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB),通过均值滤波降噪并去除无效像素;结合动态世界数据集掩膜水体/城市区域;最终导出时序GeoTIFF文件。DpRVIc基于双极化后向散射系数比,对植被结构敏感,而VVdB反映地表反射特性,二者结合可有效评估土壤湿度。该方法适用于农业监

此星光明博客 383

告别回调地狱:OkHttpUtils与RxJava响应式编程改造指南

OkHttpUtils作为一款高效的OkHttp辅助类,能够帮助开发者简化网络请求的实现流程。然而在复杂业务场景下,传统回调模式容易导致代码嵌套层级过深,形成难以维护的"回调地狱"。本文将详细介绍如何通过RxJava响应式编程改造OkHttpUtils的网络请求架构,让代码更简洁、逻辑更清晰。 ## 📌 什么是回调地狱? 在使用OkHttpUtils进行网络请求时,我们经常会看到这样的代码结

gitblog_00799的博客 856

9篇2章2节:GBD 数据库的数据申请详解

无论您是初入公共卫生领域的学生、资深的科研工作者,还是政策决策者,GBD数据库都将成为您数据分析与决策支持中不可或缺的重要工具。

MD Code 2599

瑞士 APG/LAPG 收入损失津贴专家 GPT:定制指令结构与法律检索策略深度解析

本文围绕 TheBigPromptLibrary 仓库中的一份 ChatGPT Custom GPT 定制指令文档展开分析,该文档定义了一个面向瑞士收入损失津贴(allocations pour perte de gain)、生育津贴(maternité)、陪产津贴(paternité)与兵役津贴(militaire)领域的法律咨询专家。通过拆解其角色定义、强制法条引用规范、文档与网站并行检索策略

gitblog_00589的博客 1076

C++ int转四字节数组

字节转换

我不是码农的博客~~~ 973

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android NDK的C/C++代码中利用JNI回调实现字符编码转换

在NDK下做网络传输时,遇到一个编码转换的问题,就是对方传过来的文件名是中文GBK编码,需要转成UTF8来处理。 平常在C/C++环境下编程时,系统都会提供字符编码转换的API。如Windows下有MultiByteToWideChar之类的函数,Linux下有iconv库,纯C下用wcstombs、mbstowcs也可以做。然而我在我机上的Android NDK目录下,并没有找到iconv

超级方的专栏 850

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android网络请求处理异步回调风险方案

尊重原创,转载请标明出处http://blog.youkuaiyun.com/zcxwww      我们都知道网络请求是异步的,所以就存在异步回调风险,具体来说,就是发出网络请求后,由于各种原因,如果view被回收,这时候执行回调函数就会因为找不到view而报空指针异常导致crash,而这种异步回调在我们程序中无处不在,不仅是网络请求,本地的异步任务,或者动画等都存在这种风险。可见如果不对异步回调

南朝烟雨的博客 5082

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android网络请求回调管理,Android网络请求处理异步回调风险方案

尊重原创,转载请标明出处http://blog.youkuaiyun.com/zcxwww我们都知道网络请求是异步的,所以就存在异步回调风险,具体来说,就是发出网络请求后,由于各种原因,如果view被回收,这时候执行回调函数就会因为找不到view而报空指针异常导致crash,而这种异步回调在我们程序中无处不在,不仅是网络请求,本地的异步任务,或者动画等都存在这种风险。可见如果不对异步回调做处理来规避这种风险,...

weixin_28753113的博客 523

Android回调机制入门

回调的核心思想:A做完某件事后,通知B去处理后续逻辑。Android中的常见回调:网络请求、事件监听、数据库查询等。掌握回调机制后,就能更灵活地处理Android中的异步任务和事件交互。这篇博客只是很简单地介绍了回调的思想与应用场景,具体深入的还很复杂,需要继续探索。

2401_86909484的博客 925

android网络请求回调管理,Android网络请求回调没正常走 处理方案

处理类import android.os.Handler;import android.os.Looper;import android.os.Message;/**** 考虑可能回调没正常执行** @author ziqi-mo**/public class TimerOutNextHandle {private Handler mH;private CallBack mCallBack;pri...

weixin_42537831的博客 345
上一篇: 入门android广播简单例子
下一篇: js分页插件kkpaper
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值