Java 回调方法Android
我读过很多答案和参考书,但我不理解“回调方法”这个术语。例如,onCreate()是一种回调方法。谁能解释一下这一切。 谢谢。以下是来自 引文: //Java程序来说明同步回调Java 回调方法Android,java,android,callback,Java,Android,Callback,我读过很多答案和参考书,但我不理解“回调方法”这个术语。例如,onCreate()是一种回调方法。谁能解释一下这一切。 谢谢。以下是来自 引文: //Java程序来说明同步回调 interface OnGeekEventListener { // this can be any type of method void onGeekEvent(); } interface OnGeekEventListener { // this can be any ty
interface OnGeekEventListener {
// this can be any type of method
void onGeekEvent();
}
interface OnGeekEventListener {
// this can be any type of method
void onGeekEvent();
}
B类{
private OnGeekEventListener mListener; // listener field
// setting the listener
public void registerOnGeekEventListener(OnGeekEventListener mListener)
{
this.mListener = mListener;
}
// my synchronous task
public void doGeekStuff()
{
// perform any operation
System.out.println("Performing callback before synchronous Task");
// check if listener is registered.
if (this.mListener != null) {
// invoke the callback method of class A
mListener.onGeekEvent();
}
}
// Driver Function
public static void main(String[] args)
{
B obj = new B();
OnGeekEventListener mListener = new A();
obj.registerOnGeekEventListener(mListener);
obj.doGeekStuff();
}
private OnGeekEventListener mListener; // listener field
// setting the listener
public void registerOnGeekEventListener(OnGeekEventListener mListener)
{
this.mListener = mListener;
}
// My Asynchronous task
public void doGeekStuff()
{
// An Async task always executes in new thread
new Thread(new Runnable() {
public void run()
{
// perform any operation
System.out.println("Performing operation in Asynchronous Task");
// check if listener is registered.
if (mListener != null) {
// invoke the callback method of class A
mListener.onGeekEvent();
}
}
}).start();
}
// Driver Program
public static void main(String[] args)
{
B obj = new B();
OnGeekEventListener mListener = new A();
obj.registerOnGeekEventListener(mListener);
obj.doGeekStuff();
}
}
输出:
在同步任务之前执行回调
同步任务后执行回调
异步回调
异步调用不会阻止程序执行代码。当调用从事件返回时,调用将返回回调函数。因此,在java上下文中,我们必须创建一个新线程,在该线程中调用回调方法。回调可以从线程调用,但不是必需的。回调还可能启动一个新线程,从而使其自身异步
下面是这个原则的简单实现
无过滤器
编辑
弹箭
亮度4
//说明异步回调的Java程序
interface OnGeekEventListener {
// this can be any type of method
void onGeekEvent();
}
interface OnGeekEventListener {
// this can be any type of method
void onGeekEvent();
}
B类{
private OnGeekEventListener mListener; // listener field
// setting the listener
public void registerOnGeekEventListener(OnGeekEventListener mListener)
{
this.mListener = mListener;
}
// my synchronous task
public void doGeekStuff()
{
// perform any operation
System.out.println("Performing callback before synchronous Task");
// check if listener is registered.
if (this.mListener != null) {
// invoke the callback method of class A
mListener.onGeekEvent();
}
}
// Driver Function
public static void main(String[] args)
{
B obj = new B();
OnGeekEventListener mListener = new A();
obj.registerOnGeekEventListener(mListener);
obj.doGeekStuff();
}
private OnGeekEventListener mListener; // listener field
// setting the listener
public void registerOnGeekEventListener(OnGeekEventListener mListener)
{
this.mListener = mListener;
}
// My Asynchronous task
public void doGeekStuff()
{
// An Async task always executes in new thread
new Thread(new Runnable() {
public void run()
{
// perform any operation
System.out.println("Performing operation in Asynchronous Task");
// check if listener is registered.
if (mListener != null) {
// invoke the callback method of class A
mListener.onGeekEvent();
}
}
}).start();
}
// Driver Program
public static void main(String[] args)
{
B obj = new B();
OnGeekEventListener mListener = new A();
obj.registerOnGeekEventListener(mListener);
obj.doGeekStuff();
}
}
输出:
在异步任务中执行操作
在异步任务后执行回调时,假设您有一个函数:
fun测试(){
...
}
然后你决定给它添加一些魔力。例如,添加可以在函数test
完成其工作后执行的“block”。因此,我们需要在代码中添加一些额外的内容:
接口回调接口{
有趣的工作
}
你的职能是:
fun测试(块:回调接口){
...
block.doJob()
}
因此,您可以像这样调用test
函数(或者将CallbackInterface
传递到test
函数中):
test(对象:回调接口{
覆盖有趣的doJob(){
...
}
})
一般来说,关键是将接口作为函数中的参数传递,并随时调用它,在另一端对结果执行任何操作
或者在Kotlin,您可以这样做:
fun测试(块:()->单元){
...
block.invoke()//或仅block()
}
并使用它:
测试{
...
}
应该很容易找到一个回调函数,基本上回调函数只是一个代码块,您希望在其他函数之后调用它。正如@Erik所说,onCreate()只是一个生命周期方法。因此,这意味着onCreate()将在创建活动后“调用”。如果你有兴趣了解更多关于回调的信息,我在这里用按钮和@Erik lol来解释它,来自Android文档-->生命周期回调方法