facebook android sdk 4.0,从 LoginManager 注销回调的方法

Posted

技术标签:

【中文标题】facebook android sdk 4.0,从 LoginManager 注销回调的方法【英文标题】:facebook android sdk 4.0 , way to unregister callback from LoginManager 【发布时间】:2015-05-08 10:07:27 【问题描述】:

我在我的 android 应用程序中使用 facebook sdk 4.0。 我有一个活动,其功能是向 facebook 发布一些消息(这不是我的应用程序的主要活动) 我正在执行以下操作以登录 facebook,然后发布消息

FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,  
    new FacebookCallback<LoginResult>() 
                @Override
                public void onSuccess(LoginResult loginResult) 
                    //Login is successfull, now post the message.
                

    );

问题是,我如何从 LoginManager 注销这个回调?我没有在 LoginManager 中找到任何方法来这样做。

为什么 sdk 的设计方式不提供注销选项?

问题是,如果我的活动被破坏并重新创建(例如,由于设备旋转),LoginManager 将始终引用我以前的活动实例,这是不正确的。

我想在活动的 onDestory 中取消注册。

谢谢,

【问题讨论】:

你在练习中遇到过这种情况吗?原因 SDK 是为处理这些情况而构建的,存在内存泄漏。根据我的经验,SDK 在活动生命周期中运行良好,不需要取消注册回调。 为什么要让你的活动在屏幕旋转时重新创建,在清单文件的活动标签中使用“android:configChanges="orientation|screenSize"”来停止设备旋转上的活动重新创建,只需调整onConfigurationChanged 函数中的活动布局 【参考方案1】:

LoginManager 不包含对您的回调的引用,回调管理器会。只要您将回调管理器与 Activity 保持 1-1,您的回调就会被垃圾回收。

【讨论】:

但是如果我想在多个活动中注册回调管理器怎么办?不知何故,这将导致 NullPointerException。 您应该为每个活动创建一个回调管理器。它们的寿命应该是 1-1。

以上是关于facebook android sdk 4.0,从 LoginManager 注销回调的方法的主要内容,如果未能解决你的问题,请参考以下文章

Android Facebook SDK 4.0 ShareDialog 不显示长文本

facebook android sdk 4.0,从 LoginManager 注销回调的方法

以编程方式清除 Android 上的 Facebook SDK 4.0 会话

任何示例显示如何使用自己的按钮或 Facebook 按钮在 Android 中使用 Facebook SDK 4.0 登录?

从我的应用程序中注销(使用 facebook android sdk 4.0 开发)并安装 facebook 原生应用程序

如何在 Facebook Android sdk 4.0 中使用 Graph Request 获取登录用户的电子邮件地址