Android学习笔记_74_Android回调函数触发的几种方式 广播 静态对象
一、通过广播方式:
1、比如登录。假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可。但是在Activity中不能传递监听对象,所以考虑使用广播来实现。
public void login(final LoginOnClickListener listener) {
Intent intent = new Intent(context, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
listener.handleLogin(true, "receiver .. BroadcastReceiver .. ");
}
};
IntentFilter intentFilter = new IntentFilter("android.intent.action.MAIN");
context.registerReceiver(mReceiver, intentFilter);
context.startActivity(intent);
}
2、在LoginActivity类中登录成功之后,发送一个广播通知登录成功。
Intent intent = new Intent("android.intent.action.MAIN");
sendBroadcast(intent);
参考:http://buddie.iteye.com/blog/977352
二、通过静态对象:
我在做项目时遇到一个问题,第三方调用的SDK,我的sdk里面有一个登录方法,在登录方法里面又启动一个sdk里面的登录界面,用户登录成功之后,怎样通知登录方法即第三方。后来想到了广播,如第一种方式是可以的。
后来看到别人代码中采用静态对象,然后我试了以下这种方式也可以。因为静态对象不管所在类创建多少个对象,它都是不变的。下面是具体实现:
public class SDKLibPlatform {
private Activity context;
private SDKLibPlatform() {
}
private static SDKLibPlatform platform = new SDKLibPlatform(); public static SDKLibPlatform getInstance() {
if (platform == null) {
return new SDKLibPlatform();
}
return platform;
} public static Callback listener;
/**
* 登录方法
*
* @param listener
* 回调函数
*/
public void login(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 interface Callback {
public void handle(boolean status, String message);
}
}
启动LoginActivity之后,在用户登录成功或者失败是调用 listener 对象的handle方法,从而可以通知到第三方。
if (code==1) { //登录成功
SDKLibPlatform.listener.handle(true, "login success ....... ");
}else {
SDKLibPlatform.listener.handle(false, "login false ....... ");
}
第三方调用的代码:
SDKLibPlatform.getInstance().login(new Callback(){
@Override
public void handle(boolean status,String message) {
System.out.println(status+" -====================> "+message);
}
});
Android学习笔记_74_Android回调函数触发的几种方式 广播 静态对象的更多相关文章
- 十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象
一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...
- Android自动化学习笔记:编写MonkeyRunner脚本的几种方式
---------------------------------------------------------------------------------------------------- ...
- react学习笔记1之声明组件的两种方式
//定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...
- Android学习笔记基于回调的事件处理
流程: 常见的回调方法: 代码示例: @Override public boolean onTouchEvent(MotionEvent event) { Toast.makeText(getAppl ...
- Qt学习笔记----信号与槽实现的四种方式
1.以按钮为例,首先添加一个按钮,对象名为pushButton,在按钮是右键单击选择“转到槽”即可,在转到槽选择面板(右图)里面选择需要进行的操作,比如单击clicked() 2.选择菜单“编辑”,找 ...
- angular学习笔记(三)-视图绑定数据的两种方式
绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...
- 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...
随机推荐
- 在Unity中创建攻击Slot系统
http://www.manew.com/thread-109310-1-1.html 马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?注册帐号 ...
- 记一次MongoDB性能问题
下面文章转载自火丁笔记,原作者描述了一次MongoDB数据迁移过程中遇到的性能问题及其解决方案,中间追查问题的方法和工具值得我们学习.下面是其原文: 最近忙着把一个项目从MySQL迁移到MongoDB ...
- web部署启动或者运行报错查看日志寻找问题方法
今天运行一个项目,启动报错,查看日志,只看到了前半段错误日志,根据前半段错误日志差查找原因,找了两个小时,也没有解决掉,最后根据后半段错误日志十分钟定位错误,给解决了,以后出现问题不能急躁,查看完成的 ...
- [Verilog] parameter
parameter和localparam的作用范围均为本模块,区别在于前者可用于在实例化模块的时候进行参数的传递. 用已定义的参数对变量赋值时,按照补码的方式处理,若出现溢出的情况,则截取低位.
- 网络连接和初始HTTP请求
浏览器检索网页,先从URL开始,使用DNS确定IP地址,再用基于TCP和HTTP协议连接到服务器,请求相关的内容,得到相应,浏览器解析并呈现到屏幕上.服务器响应后,浏览器响应不会同时全部到达,会陆续到 ...
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
本篇是ECMA-262-3 in detail系列的一个概述(本人后续会翻译整理这些文章到本系列(第11-19章).每个章节都有一个更详细的内容链接,你可以继续读一下每个章节对应的详细内容链接进行更深 ...
- spark scala 例子
object ScalaApp { def main(args: Array[String]): Unit = { var conf = new SparkConf() conf.setMaster( ...
- MarkDown 语言简单使用
# Markdown file ![alt img is error](http://cdn2.jianshu.io/assets/web/logo-58fd04f6f0de908401aa561cd ...
- r.js压缩打包
AMD模块化开发中的代码压缩打包工具——r.js 环境搭建基于nodejs:用于AMD模块化开发中的项目文件压缩打包,不是AMD模式也是可以的 javascript部分 压缩javascript项目开 ...
- Angular JS例子 ng-repeat遍历输出
首先要有Angular的插件:然后才开始遍历 :<!DOCTYPE html> <html lang="en"> <head> <meta ...