android进阶-回调

回调(Callback)是一种常见的编程模式,用于处理异步事件或信息传递。通过回调,一个对象(通常是一个事件的发起者或处理者)可以将某些任务或行为的执行通知给另一个对象

常见例子:

事件监听器:这是回调的一种典型应用。例如,OnClickListener 用于监听按钮点击事件,OnTouchListener 用于监听触摸事件等。开发者可以通过实现这些接口并设置监听器来响应不同的用户界面事件。
异步任务处理:AsyncTask 是 Android 中处理异步任务的一种机制,它允许执行后台操作并在主线程中更新UI。虽然现在推荐使用 Kotlin 的协程来处理异步操作,AsyncTask 的设计原理仍是基于回调模式,通过doInBackground和onPostExecute等方法的实现来分别处理后台任务和任务完成后的UI更新。--服务的那个方法
网络请求回调:在进行网络请求时(如使用 Retrofit、OkHttp),回调用于处理请求成功或失败后的操作。开发者可以定义成功或错误的回调方法,以便在收到响应时更新UI或处理数据。
权限请求回调:从 Android 6.0(API 级别 23)开始,应用需要请求运行时权限。requestPermissions方法用于请求权限,而onRequestPermissionsResult回调方法用于接收权限请求的结果,并据此执行相应的操作。
广播接收者(BroadcastReceiver):用于监听和响应来自其他应用或系统的广播消息。当接收到广播时,onReceive方法会被回调,允许开发者在此方法中执行相应的操作。
服务连接(ServiceConnection):当组件想要绑定到服务时(使用bindService),可以通过实现ServiceConnection接口并实现其onServiceConnected和onServiceDisconnected方法来管理与服务的连接和断开。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_38788068/article/details/136638849

回调的主体思想是把接口对象作为函数的参数传递进去。

package com.example.myapplication;public class Worker {public interface Callback {void onResult(String result);} //内部类private Callback callback;public Worker(Callback callback) {this.callback = callback;}  //把接口对象作为参数传递。构造函数public void doWork() {// 假设这是一些耗时的操作String result = "处理结果";// 在合适的时候调用回调方法callback.onResult(result);} //必须得有这个方法。
}

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;
import android.widget.Button;import com.example.myapplication.Worker;public class MainActivity extends AppCompatActivity {private Worker worker;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);worker = new Worker(new Worker.Callback() {@Overridepublic void onResult(String result) {Log.d("Callback33", "结果: " + result);}});// 开始工作worker.doWork();//要去调用才行}
}

也就是说需要worker.dowork工作完毕并且准备好了结果,才会调用onResult方法!,而相对于点击事件而言

radioButton.setOnClickListener(new View.OnClickListener() 

  • 处理异步请求的返回值
  • 同一个事件有不同的处理方法

和这个例子很类似,通过view.java中的接口匿名和函数来处理。只是少了一个doWork,个人怀疑是在其他的地方,处理复杂的触摸、点击等操作,然后处理完后发生点击,回调回Onclick方法中,然后就能处理其他事情了

重要理解:在这个例子中,Worker 类接受一个实现了 Callback 接口的对象作为参数。当 Worker 类的 doWork 方法执行完毕并准备好提供结果时,它会调用 onResult 方法,并将结果传递给实现了 Callback 接口的类。这样,MainActivity 就可以在 onResult 方法中接收并处理结果了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Next.js+TS项目中的错误边界处理与渲染降级实践

在开发基于Next.js的TypeScript应用程序时,我们经常会遇到一些意料之外的JavaScript错误,这些错误可能会导致页面直接白屏,严重影响用户体验。为了提升应用的健壮性和用户体验,引入ErrorBoundary组件是一种非常有效的策略。本文将…

【回溯 栈 代数系统 动态规划】282. 给表达式添加运算符

本文涉及知识点 回溯 栈 代数系统 动态规划 LeetCode 282. 给表达式添加运算符 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)、- 或 * ,返回 所有 能够得到 ta…

Rust 中的声明可见性

Rust 中的声明可见性 在 Rust 编程语言中,声明可见性是一个核心概念,它决定了代码中的项(如函数、结构体、枚举等)在哪些范围内可以被访问。Rust 通过一套严谨的规则来控制这些可见性,以确保代码的安全性和封装性。下…

Ngnix VTS模块添加和测试

目录 VTS模块介绍 上传软件包xftp/lrzsz 执行脚本 添加vts的配置 测试 测试:nginx.conf配置文件是否有语法错误 测试:windows机器上访问效果 VTS模块介绍 Nginx VTS模块(nginx Virtual Host Traffic Status Module)是一个第三…

【C++初阶】string模拟实现

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

【精读Yamamoto】方向性连接如何丰富神经网络的功能复杂度 | 体外神经元培养实验 | 脉冲神经元模型(SNN) | 状态转移模型

探索大脑的微观世界:方向性连接如何丰富神经网络的功能复杂度 在神经科学领域,理解大脑如何通过其复杂的网络结构实现高级功能一直是一个核心议题。最近,一项由Nobuaki Monma和Hideaki Yamamoto博士领导的研究为我们提供了新的视角&#xff…

cuttag学习笔记

由于课题可能用上cut&tag这个技术,遂跟教程学习一波,记录一下以便后续的学习(主要是怕忘了) 教程网址cut&tag教程 背景知识:靶标下裂解与标记(Cleavage Under Targets & Tagmentation&#xf…

什么是跨境物流管理系统,它有什么功能

对于从事跨境物流的物流商来说,提升物流效率是一直都需要考虑的问题。不过不用担心,跨境物流系统(TMS)是个不错的解决方案。 谁应该使用跨境物流管理系统? 可以说,跨境物流系统最大的特点就是使用上的灵活性…

90后医生下班摆摊就能赚1500?看内行人是如何分析的?2024普通人逆袭的机会,2024普通人想翻身的风口行业

“在自己空余的时间,做点自己喜欢的事情”这就是浙江义乌的王医生,摆摊被采访时的回答。王大夫说,自己兼职已经有半年多了,每天的营业额能达到1500元。同时王医生表示,自己的目标是开一间自己的小店。 看到这里&#x…

新版Idea配置仓库教程

这里模拟的是自己搭建的本地仓库环境,基于虚拟机搭建利用gogs创建的仓库 1、Git环境 你需要准备好git和仓库可以使用github 、gitee等 1.1 拉取代码 本项目使用 Git 进行版本控制,在 gogs 上创建一个个人使用的 git 仓库: http://192.168.…

1.5.2 基于XML配置方式使用Spring MVC

用户登录演示效果 实战概述,可以帮助你更好地理解整个流程。 项目创建 创建了一个名为 SpringMvcDemo01 的 Jakarta EE 项目。通过 Maven 添加了项目所需的依赖,包括 Spring MVC、JSTL 等。 视图层页面 创建了登录页面(login.jsp&#xff0…

计算机毕业设计springboot体育馆场地预约管理系统【附源码】

计算机毕业设计springboot体育馆场地预约管理系统[附源码] 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制…

良心实用的电脑桌面便利贴,好用的便利贴便签小工具

在日常办公中,上班族经常需要记录临时任务、重要提醒或者突发的灵感。比如,在紧张的项目会议中,忽然想到一个改进的点子,或者是在处理邮件时,需要记下对某个客户的回复要点。在这些场景下,如果能直接在电脑…

基于SpringBoot+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

Gitee添加仓库成员

1.进入你的项目 2.点击管理 3.左侧有个仓库管理 4.要加哪个加哪个,有三个方式~ 可以直接添加之前仓库合作过的开发者

In Context Learning(ICL)个人记录

In Context Learning(ICL)简介 In Context Learning(ICL)的关键思想是从类比中学习。上图给出了一个描述语言模型如何使用 ICL 进行决策的例子。首先,ICL 需要一些示例来形成一个演示上下文。这些示例通常是用自然语言…

react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)

技术要点 动态样式 className{tabItem ${currentType item.value && "active"}}安装 lodash npm i --save lodash使用 lodash 对对象数组排序(不会改变源数组) _.orderBy(dataList, "readNum", "desc")src\De…

ArcGIS10.2系列许可到期解决方案

本文手机码字,不排版了。 昨晚(2021\12\17)12点后,收到很多学员反馈 ArcGIS10.2系列软件突然崩溃。更有的,今天全单位崩溃。 ​ 提示许可15天内到期。之前大部分许可是到2021年1月1日的。 ​ 后续的版本许可都是永久的…

深度学习技术之加宽前馈全连接神经网络

深度学习技术 加宽前馈全连接神经网络1. Functional API 搭建神经网络模型1.1 利用Functional API编写宽深神经网络模型进行手写数字识别1.1.1 导入需要的库1.1.2 加载虹膜(Iris)数据集1.1.3 分割训练集和测试集1.1.4 定义模型输入层1.1.5 添加隐藏层1.1…

SOCKS5代理、代理IP与网络安全策略

在全球化的商业竞争中,"出海"不仅是中国企业拓展国际市场的重要战略,也是一项涉及广泛技术应用的复杂工程。尤其是对于跨界电商和游戏行业,有效利用网络技术如SOCKS5代理和代理IP,以及构建严密的网络安全策略&#xff0…