最近学习javaEE中servlet监听器的模块,与Android中事件监听回调进行对比理解,特地花点时间记录下来增强记忆。
1 接口回调步骤
(1)定义接口,接口方法
(2)在 X 类中创建接口成员变量,并对外暴露传入接口对象的方法
(3)在 X 类中对外暴露实现了接口方法的公共方法
(4)在 Y 类中调用 X 类中的公共方法,传入对应参数
(5)在 Z 类使用类中调用 X 类中传入接口对象的方法,即可收到回调,得到 Y 类中传入的信息
(2)在 X 类中创建接口成员变量,并对外暴露传入接口对象的方法
(3)在 X 类中对外暴露实现了接口方法的公共方法
(4)在 Y 类中调用 X 类中的公共方法,传入对应参数
(5)在 Z 类使用类中调用 X 类中传入接口对象的方法,即可收到回调,得到 Y 类中传入的信息
举个小栗子:
<span style="font-size:18px;">public interface OnClickListener { ---------------------------------------------------</span><span style="font-family: Arial, Helvetica, sans-serif;font-size:18px;">>(1)</span><span style="font-size:18px;">
public void OnClick(Button b);
}</span>
public class Button { ----------------------------------------------------------------->X类
OnClickListener listener;
public void click() { --------------------------------------------------------------->(3)
listener.OnClick(this);
}
public void setOnClickListener(OnClickListener listener) { ------------------------->(2)
this.listener = listener;
}
}
public class Activity { --------------------------------------------------------------->Y、Z
public Activity() {
}
public static void main(String[] args) {
Button button = new Button();
//<span style="white-space:pre">将接口对象OnClickListener 赋给 Button的接口成员</span>
button.setOnClickListener(new OnClickListener(){ --------------------------------->(5)
@Override
public void OnClick(Button b) {
System.out.println("clicked");
}
});
button.click(); -------------------------------------------------------------->(4)
}
}
需求:游戏调用SDK聚合框架API,对应间接地调用到了渠道(如:360、豌豆荚SDK的生命周期方法)
public interface IActivityCallback { ------------------------------------------------>(1)
public void onActivityResult(int requestCode, int resultCode, Intent data);
public void onCreate();
public void onStart();
public void onPause();
public void onResume();
public void onNewIntent(Intent newIntent);
public void onStop();
public void onDestroy();
public void onRestart();
public void onBackPressed();
public void onConfigurationChanged(Configuration newConfig);
}
//SDK单例,相当于之前说的X类
public class FrameSDK {
private static FrameSDK instance;
private List<IActivityCallback> mActivityCallbacks;
private FrameSDK() {
mActivityCallbacks = new ArrayList<>();
}
public static FrameSDK getInstance() {
if (instance == null) {
instance = new FrameSDK();
}
return instance;
}
public void setActivityCallback(IActivityCallback listener) { -------------------------------------->(2)
if (!mActivityCallbacks.contains(listener) && listener != null) {
mActivityCallbacks.add(listener);
}
}
------------------------------------------------以下都是(3)--------------------------------------------------->(3)
public void onActivityResult(int requestCode, int resultCode, Intent data){
if (mActivityCallbacks != null) {
for (IActivityCallback callback :mActivityCallbacks ) {
callback.onActivityResult(requestCode,resultCode,data);
}
}
}
public void onConfigurationChanged(Configuration newConfig){
if (mActivityCallbacks != null){
for (IActivityCallback callback :mActivityCallbacks) {
callback.onConfigurationChanged(newConfig);
}
}
}
public void onBackPressed() {
if (mActivityCallbacks != null) {
for (IActivityCallback callback :mActivityCallbacks ) {
callback.onBackPressed();
}
}
}
public void onCreate() {
if (mActivityCallbacks != null) {
for (IActivityCallback callback :mActivityCallbacks ) {
callback.onCreate();
}
}
}
public void onStart(){
if (mActivityCallbacks != null) {
for (IActivityCallback callback :mActivityCallbacks ) {
callback.onStart();
}
}
}
public void onResume(){
if (mActivityCallbacks != null) {
for (IActivityCallback callback :mActivityCallbacks ) {
callback.onResume();
}
}
}
public void onPause() {
if (mActivityCallbacks != null) {
for (IActivityCallback callback :mActivityCallbacks ) {
callback.onPause();
}
}
}
public void onStop() {
if (mActivityCallbacks != null) {
for (IActivityCallback callback :mActivityCallbacks ) {
callback.onStop();
}
}
}
public void onDestroy() {
if(mActivityCallbacks != null){
for(IActivityCallback callback : mActivityCallbacks){
callback.onDestroy();
}
}
}
public void onNewIntent(Intent newIntent) {
if(mActivityCallbacks != null){
for(IActivityCallback callback : mActivityCallbacks){
callback.onNewIntent(newIntent);
}
}
}
public void onRestart() {
if(mActivityCallbacks != null){
for(IActivityCallback callback : mActivityCallbacks){
callback.onRestart();
}
}
}
}
渠道SDK进行的操作,相当于第(4)步
FrameSDK.getInstance().setActivityCallback( ---------------------------------------------------(4)
new ActivityCallbackAdapter() {
public void onResume() {
wandouGamesApi.onResume();
}
public void onPause() {
wandouGamesApi.onPause();
}
});
其中ActivityCallbackAdapter是实现了IActivityCallback接口的适配器
现在,聚合SDK框架和渠道SDK的任务已经完成了,接下来看如何游戏如何调用
public void onActivityResult(int requestCode, int resultCode, Intent data) { -------------------------(5)
FrameSDK.getInstance().onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
public void onStart() {
FrameSDK.getInstance().onStart();
super.onStart();
}
public void onPause() {
FrameSDK.getInstance().onPause();
super.onPause();
}
public void onResume() {
FrameSDK.getInstance().onResume();
super.onResume();
}
public void onNewIntent(Intent newIntent) {
FrameSDK.getInstance().onNewIntent(newIntent);
super.onNewIntent(newIntent);
}