十四、Android學習筆記_Android回呼函數觸發的幾種方式 廣播 靜態對象

來源:互聯網
上載者:User

標籤:android   class   blog   code   java   http   

一、通過廣播方式:

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);                                  }                            });

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.