gpt4 book ai didi

android - view.getViewTreeObserver().addOnGlobalLayoutListener 泄漏 fragment

转载 作者:可可西里 更新时间:2023-11-01 19:10:13 29 4
gpt4 key购买 nike

当我使用 GlobalLayoutListener 查看 softKeyboard 是否打开时,该 fragment 在被销毁后不再被垃圾回收。

我的工作:

  • 我在 fragment 的 onDestroy() 中删除了监听器
  • 我在 onDestroy() 中将 Listener 设置为 null
  • 我在 onDestroy()
  • 中将观察到的 View 设置为 null

仍然泄漏 fragment 。

有没有人遇到过类似的问题并且知道解决方法??

我的onDestroy:

   @Override
public void onDestroy(){
Log.d(TAG , "onDestroy");

if(Build.VERSION.SDK_INT < 16){
view.getViewTreeObserver().removeGlobalOnLayoutListener(gLayoutListener);
}else{
view.getViewTreeObserver().removeOnGlobalLayoutListener(gLayoutListener);
}

view = null;
gLayoutListener = null;



super.onDestroy();
}

最佳答案

我强烈认为在 onDestroy() 中删除由 View 对象引用的 Listener 为时已晚。此覆盖方法发生在 onDestroyView() 之后,它应该“...清理与其 View 关联的资源”。您可以在 onStop() 中使用相同的代码。虽然我没有使用这种技术。

我可以推荐这段代码,我使用它时调试器没有任何问题。

// Code below is an example. Please change it to code that is more applicable to your app.
final View myView = rootView.findViewById(R.id.myView);
myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressLint("NewApi") @SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {

// Obtain layout data from view...
int w = myView.getWidth();
int h = myView.getHeight();
// ...etc.

// Once data has been obtained, this listener is no longer needed, so remove it...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
myView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
else {
myView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});

注意事项:

  • 由于 getViewTreeObserver 用于布局,通常您只需要短时间使用此监听器。因此立即删除监听器。
  • 第二次调用 removeOnGlobalLayoutListener() 应该被 Studio 划掉,因为它在 JELLY_BEAN 之前不可用。
  • 如果您使用的是 Android Studio,则不需要 Pragma 代码 @SuppressWarnings("deprecation")
  • 代码 myView = rootView.findViewById(R.id.myView); 可能需要更改为更适用于您的应用或情况的代码。

关于android - view.getViewTreeObserver().addOnGlobalLayoutListener 泄漏 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28264139/

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