android 静态方法回调,十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象...

一、通过广播方式:

1、比如登录。假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可。但是在Activity中不能传递监听对象,所以考虑使用广播来实现。

69c5a8ac3fa60e0848d784a6dd461da6.png

69c5a8ac3fa60e0848d784a6dd461da6.pngpublic void login(finalLoginOnClickListener listener) {

Intent intent= new Intent(context, LoginActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

BroadcastReceiver mReceiver= newBroadcastReceiver() {public voidonReceive(Context context, Intent intent) {

listener.handleLogin(true, "receiver .. BroadcastReceiver .. ");

}

};

IntentFilter intentFilter= newIntentFilter("android.intent.action.MAIN");

context.registerReceiver(mReceiver, intentFilter);

context.startActivity(intent);

}

69c5a8ac3fa60e0848d784a6dd461da6.png

69c5a8ac3fa60e0848d784a6dd461da6.png

2、在LoginActivity类中登录成功之后,发送一个广播通知登录成功。

69c5a8ac3fa60e0848d784a6dd461da6.pngIntent intent = new Intent("android.intent.action.MAIN");

sendBroadcast(intent);

69c5a8ac3fa60e0848d784a6dd461da6.png

二、通过静态对象:

我在做项目时遇到一个问题,第三方调用的SDK,我的sdk里面有一个登录方法,在登录方法里面又启动一个sdk里面的登录界面,用户登录成功之后,怎样通知登录方法即第三方。后来想到了广播,如第一种方式是可以的。

后来看到别人代码中采用静态对象,然后我试了以下这种方式也可以。因为静态对象不管所在类创建多少个对象,它都是不变的。下面是具体实现:

69c5a8ac3fa60e0848d784a6dd461da6.png

69c5a8ac3fa60e0848d784a6dd461da6.pngpublic classSDKLibPlatform {privateActivity context;privateSDKLibPlatform() {

}private static SDKLibPlatform platform = newSDKLibPlatform();public staticSDKLibPlatform getInstance() {if (platform == null) {return newSDKLibPlatform();

}returnplatform;

}public staticCallback listener;/*** 登录方法

*

*@paramlistener

* 回调函数*/

public voidlogin(Callback callback) {//将这个回调函数保存在listener对象上

listener =callback;

Intent intent= new Intent(context, LoginActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//启动activity

context.startActivity(intent);

}

SDKLibPlatform.listener.handle(false, "login ....... ");

public interfaceCallback {public void handle(booleanstatus, String message);

}

}

69c5a8ac3fa60e0848d784a6dd461da6.png

69c5a8ac3fa60e0848d784a6dd461da6.png

启动LoginActivity之后,在用户登录成功或者失败是调用 listener 对象的handle方法,从而可以通知到第三方。

69c5a8ac3fa60e0848d784a6dd461da6.pngif (code==1) { //登录成功

SDKLibPlatform.listener.handle(true, "login success ....... ");

}else{

SDKLibPlatform.listener.handle(false, "login false ....... ");

}

69c5a8ac3fa60e0848d784a6dd461da6.png

第三方调用的代码:

69c5a8ac3fa60e0848d784a6dd461da6.pngSDKLibPlatform.getInstance().login(newCallback(){

@Overridepublic void handle(booleanstatus,String message) {

System.out.println(status+" -====================> "+message);

}

});

69c5a8ac3fa60e0848d784a6dd461da6.png

原文:http://www.cnblogs.com/liyuzhao/p/3783616.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值