gpt4 book ai didi

android - 注销 Facebook 登录按钮的回调

转载 作者:行者123 更新时间:2023-11-29 01:12:45 26 4
gpt4 key购买 nike

Android 版 4.17.0 和 4.18.0 中的最新 Facebook SDK 导致日志记录实现内存泄漏。有一种方法可以注册回调,但也应该有方法取消注册它们,例如 onDestroy() 方法。您知道如何注销 Facebook LoginButton 实现的回调吗?

我以这种方式在 onCreate() 中注册 facebook 回调:

    mCallbackManger = CallbackManager.Factory.create();
mFacebookLoginBtn.setReadPermissions("public_profile");
mFacebookLoginBtn.registerCallback(mCallbackManger, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Timber.d("Facebook login success %s", loginResult.toString());
showProgressDialog();
getPresenter().loginWithFacebook(loginResult.getAccessToken());
}

@Override
public void onCancel() {
Timber.d("Facebook login cancel");

}

@Override
public void onError(FacebookException error) {
Timber.d("Facebook login error %s", error.toString());

}
});

我忘了提到按钮在屏幕上不可见,但我从我的自定义按钮向它传递了 onclick 事件。发生问题的原因是那个奇怪的电话。最终的解决方案是删除 mFacebookLoginBtn 并调用自定义按钮的 onClick 事件:

LoginManager.getInstance().logInWithReadPermissions(this, Collections.singletonList("public_profile"));

最佳答案

这种内存泄漏的解决方法是不使用(内部)匿名类。并利用 WeakReference

// Fragment or whatever your class is...
class MyFragment extends Fragment {
public [...] {
mCallbackManger = CallbackManager.Factory.create();
mFacebookLoginBtn.setReadPermissions("public_profile");
mFacebookLoginBtn.registerCallback(mCallbackManger, new MyFragment.FBCallback(this));
}

// New static class (not inner)
static class FBCallback implements FacebookCallback<LoginResult> {
private WeakReference<MyFragment> fragmentRef;

public FBCallback(MyFragment fragment) {
fragmentRef = new WeakReference<>(fragment)
}

@Override
public void onSuccess(LoginResult loginResult) {
Timber.d("Facebook login success %s", loginResult.toString());

MyFragment fragment = fragmentRef.get()
if (fragment != null) {
fragment.showProgressDialog();
fragment.getPresenter().loginWithFacebook(loginResult.getAccessToken());
}
}

@Override
public void onCancel() {
Timber.d("Facebook login cancel");
}

@Override
public void onError(FacebookException error) {
Timber.d("Facebook login error %s", error.toString());
}
}
}

关于android - 注销 Facebook 登录按钮的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41804027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com