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 ...
随机推荐
- 解决 command not found: express
需要先执行 sudo npm install -g express-generator 再安装 sudo npm install -g express 建立项目骨架 express -e xxx
- 【计算机网络】详解HttpURLConnection
请求响应流程 设置连接参数的方法 setAllowUserInteraction setDoInput setDoOutput setIfModifiedSince setUseCaches setD ...
- C++编程规范(摘记)
C++编程规范 函数的参数 输入使用const T&, 输出使用指针 函数的返回类型 如果返回引用, 则返回的对象应该是属性, 因为这个涉及到了生命周期 尽量不返回, 而是通过参数列表中的输出 ...
- CF 305A——Strange Addition——————【暴力加技巧】
A. Strange Addition time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Django——admin管理工具
一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...
- C语言字符数组与字符串
研究几个案例: 输出图案: #include <stdio.h> void main() { ][] = { {', ' ', ' '}, {', ' '}, {'}, {', ' '}, ...
- 3D开源推荐:3DWebExplorer
开源网址:https://github.com/irconde/3DWebExplorer 介绍:演示如何内嵌Google Earth 插件,开发面向公众的3D旅游展示平台
- 【Linux】chmod命令
格式chmod 权限 要修改权限的文件linux中的权限如下: -rw------- (600) -- 只有属主有读写权限. -rw-r--r-- (644) -- 只有属主有读写权限:而属组用户和其 ...
- Intent的简单使用
主要实现Intent之间值得转递,如从AActivity到BActivity之间传一个数值,一个实体类,一个集合类 下面代码只要是实现对startActivityForResult的使用,用ABC 3 ...
- 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程
本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...