回调(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
方法中接收并处理结果了。