接口回调通俗的理解就A找B谈事情,结果B有其他事情在处理,现在不方便和A谈事情,于是他们约定在B处理完其他事情之后去通知A,我这边现在有时间了,我们可以谈论事情了,这样处理的好处就是在B处理其他事情的时候,A不用一直等着B,A可以先去处理其他事情,等B通知A之后,A再来处理这个事情。
这里面主要就是这个约定了,也就是函数回调里面定义的接口,下面我们看一下下面这个demo
public class MainActivity extends Activity { private Button mServerButton; private Button mClientButton; private ServerInterface mServerInterface; private TextView mShowTextView; private final int SLEEP_COMPLATE = 1; private final int NOTIFY_CLIENT = 2; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); mServerButton = findViewById(R.id.server); mClientButton = findViewById(R.id.client); mShowTextView = findViewById(R.id.show_message); mServerButton.setEnabled(false); mClientButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getApplicationContext(),"您好!",Toast.LENGTH_LONG).show(); } }); setCallBack(new ServerInterface() { @Override public void notifyComplate() { mClientButton.setEnabled(true); mShowTextView.setText("Client已收到通知!"); } }); mMainHandler.sendEmptyMessageDelayed(SLEEP_COMPLATE,10000); }
private Handler mMainHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case SLEEP_COMPLATE: mShowTextView.setText("Server已休息好,开始工作"); mServerButton.setEnabled(true); mMainHandler.sendEmptyMessageDelayed(NOTIFY_CLIENT,5000); break; case NOTIFY_CLIENT: mShowTextView.setText("Server已开始工作,有什么事情可以去找他"); mServerInterface.notifyComplate(); break; default: break; } } }; public void setCallBack(ServerInterface serverInterface) { mServerInterface = serverInterface; } } public interface ServerInterface { public void notifyComplate(); }
上面这个demo可以理解为就是客户端有事情需要去找服务端,结果服务端需要休息,他们约定在服务端休息完成之后,服务端去通知客户端那边可以谈事情了,这个里面重点是需要去注册一下这个接口,实现这个接口里面的约定函数