安卓回调什么意思
Ⅰ Android 点击回调传递
在使用MultiTypeAdapter实现RecyclerView多类型显示的时候,会创建一个ViewHolder和ViewBinder,此时如果要在Activity或者Fragment相应点击事件的时候,需要在ViewHolder和ViewBinder之间做传递。如果一个ViewHolder下有RecyclerView,然后也使用了MultiTypeAdapter,那么这个点击事件的回调将会是一件相当头疼的事情。
在使用 LifeCycle 时,发现他只需要当前类实现 LifecycleObserver ,然后通过调用 addObserver 方法即可实现事件传递。由此想到点击事件是否也可以使用此种形式来实现。
DEMO
在受到 LifeCycle 的启发下,模仿这写了几个类。
一个点击事件如果在某个类中如果需要做操作,那么需要实现该接口。
继承OnItemClick,并实现具体的方法。
基本点击事件Observer
这一层,对事件在OnBindViewHolder中做了一次传递,通过dispatchObserver方法,将ViewBinder中的事件传递到了ViewHolder中。
定义两个点击事件。
创建实体类,和Binder相对应。
在覆写 setData 方法的时候,一定要调用super。不然事件无法传递。
响应事件的回调,只需要调用 getObserver 方法,然后传入对应的Observer,如果有,就直接调用方法。
adapter传递事件,也是通过dispatchObserver方法。
ViewBinder其实就不需要做什么事情了,比较简单。
Ⅱ android接口回调的几种
可以使用Observer,观察者模式来实现回调。或者接口中传入类,然后在接口处理之后,进行调用类的方法进行回调。
接口回调示例
public interface ConfirmDialogListener{
public void onLeft(Object obj); //按确认键
public void onRight(Object obj);//按back键
}
public static Dialog confirmDialog(final Context activity, final ConfirmDialogListener listener,final Object obj){
if(listener != null)
listener.onRight(obj);
}
Ⅲ 什么是回调函数 android
class A implements Camera.PreviewCallback{
/**
* 预览帧回调函数
*
*/
public void onPreviewFrame(byte[] data, Camera camera) {
//当视频流开启的时候就可以在这个方法里做你想做的事,那么这个就是一个回调函数
}
}
Ⅳ android回调方法与activity生命周期有何关系
你的问题有点模糊,你这里主要想了解的是什么,安卓的生命周期中onStart()就是一个回调方法,他和avtivity的关系如下,以下就是安卓生命周期的过程。。
package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityDemo extends Activity {
private static final String TAG = "ActivityDemo";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e(TAG, "start onCreate~~~");
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~~");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e(TAG, "start onRestart~~~");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~~");
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG, "start onPause~~~");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~~");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~~");
}
}
自己运行一下就知道了~这样你的理解会更深,记得更好~
我们打开应用时先后执行了onCreate()->onStart()->onResume
BACK键:
当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法
HOME键:
当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁
而当我们再次启动ActivityDemo应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法
涉及到了avtivity的生命周期,和垃圾回收机制。。
Ⅳ 安卓开发 回调函数和return有什么不同
回调函数(callback) 先注册到‘系统’中,格式一般为<事件类型,回调函数>,每当指定事件类型出现后,‘系统’就会调用 回调函数;
普通函数由‘用户的应用程序’调用 return 后函数执行就结束了
Ⅵ Android怎么定义回调函数
class
a
implements
camera.previewcallback{
/**
*
预览帧回调函数
*
*/
public
void
onpreviewframe(byte[]
data,
camera
camera)
{
//当视频流开启的时候就可以在这个方法里做你想做的事,那么这个就是一个回调函数
}
}
Ⅶ android 回调方法怎么写
package com.smart;
/**
* 定义回调接口
*/
public interface CallBack {
void execute();
}
package com.smart;
/**
* 工具类
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis(); //测试起始时间
callBack.execute();///进行回调操作
long end = System.currentTimeMillis(); //测试结束时间
System.out.println("[use time]:" + (end - begin)); //打印使用时间
}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 测试类A的某个方法执行的时间
//B.method(); 测试类B的某个方式执行的时间
System.out.print("回调" );
}
});
}
}
package com.smart;
/**
* 工具类
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis();//测试起始时间
callBack.execute();///进行回调操作
long end = System.currentTimeMillis();//测试结束时间
System.out.println("[use time]:" + (end - begin));//打印使用时间
}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 测试类A的某个方法执行的时间
//B.method(); 测试类B的某个方式执行的时间
System.out.print("回调");
}
});
}
}
Ⅷ 谁知道android编程的callback是什么意思如何理解里面重写的方法
callback 就是把一个函数传到另外一个函数,让对方可以叫回来。
Ⅸ 在java中回调函数怎么理解,android中的回调函数和java中有区别吗
可以理解为一种逻辑的延伸。例如在java中已onXXX开头的方法。
这些方法通常是一种信息的延伸。预示着某些事件发生了。这些信息通常是某些大逻辑的一部分。而其他部分不需要开发者考虑。
比如onCreate方法,了解了生命周期就会知道他是整个activity第一个执行的代码。那么他究竟是谁调用的。这个一般不需要考虑。只需要了解系统在调用即可。 而这个方法在执行的时候。需要你去补充这个方法的实现。 所以相当于你完成了事件的余下部分。
比如早晨需要在闹铃响之后起床。那么你可以设置一个timer来记时或者是一个线程来跑。当发现到的时候。需要把这个事件抛出去。至于谁来处理。这不是闹铃考虑的范围。他的作用就是触发事件.至于处理。那么需要处理这个事件的。可以用很多方法来建立关联的句柄。
比如。通过接口的实现。继承。或者像android里的广播。
回调函数描述的是一种模式。这个和语言或平台无关。所以android中和java中是一样的。C++中也有。
Ⅹ Android 回调接口是啥,回调机制详解
在Android中到处可见接口回调机制,尤其是UI事件处理方面,这里介绍android接口回调机制,涉及到android接口回调相关知识
在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致咱们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误。那有什么好的方法去实现数据的线性传递呢?先介绍下回调机制原理。
回调函数
回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,咱们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
开发中,接口回调是咱们经常用到的。
接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行。
举个例子:
A有一个问题不会,他去问B,B暂时解决不出来,B说,等咱(B)解决了再告诉您(A)此时A可以继续先做别的事情。
那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题。
代码中比如最常用的:
一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法
Button btn = new Button(this);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
那么下面通过一个Demo理解接口回调:
主线程开启一个异步任务,当异步任务接收到数据,则把数据用TextView显示出来
1、首先 咱们需要定义一个接口,定义一个方法,参数为一个字符串:
package com.xqx.InterfaceDemo;
public interface ChangeTitle {
void onChangeTitle(String title);
}
2、写一个异步任务,把接口作为构造方法参数,在doInBackground()方法中判断如果有数据,则接口回调
package com.xqx.InterfaceDemo;
import android.content.Context;
import android.os.AsyncTask;
public class MyTask extends AsyncTask<String,Void,String>{
private ChangeTitle changeTitle;
public MyTask(ChangeTitle changeTitle) {
this.changeTitle = changeTitle;
}
@Override
protected String doInBackground(String... strings) {
if (strings[0]!=null){
changeTitle.onChangeTitle(strings[0]);
}
return null;
}
}
3、主Activity,给异步任务参数传this,即 接口回调方法在此类中执行,那么就需要实现ChangeTitle接口,重写接口中
onChangeTitle 方法
package com.xqx.InterfaceDemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity implements ChangeTitle {
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.textView);
new MyTask(this).execute("我是标题");
}
// 重写接口方法,执行相应操作
@Override
public void onChangeTitle(String title) {
textView.setText(title);
}
}