十四、Android学习笔记_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学习)