是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

AndroidLearner:

我有一个包含一个片段的活动。运行泄漏金丝雀,我看到活动有内存泄漏。

我注释掉从活动和片段的所有代码到活动中只显示了片段与片段有一个空的XML布局。我没有辅助功能在任何文件或XML中。

* AccessibilityManager$1.!(this$0)! (anonymous subclass of android.view.accessibility.IAccessibilityManagerClient$Stub)
* ↳ AccessibilityManager.!(mTouchExplorationStateChangeListeners)!
* ↳ CopyOnWriteArrayList.!(elements)!
* ↳ array Object[].!([2])!
* ↳ AccessibilityManagerCompat$TouchExplorationStateChangeListenerWrapper.!(mListener)!
* ↳ BaseTransientBottomBar$SnackbarBaseLayout$1.!(this$0)! (anonymous implementation of android.support.v4.view.accessibility.AccessibilityManagerCompat$TouchExplorationStateChangeListener)
* ↳ Snackbar$SnackbarLayout.mContext
* ↳ ContextThemeWrapper.mBase
* ↳ MessagesActivity
Xi Wei :

好了,事实上,我也想通了。这是小吃吧内存泄漏,这里是它如何被复制:https://github.com/GC-Xi/SnackbarBug

方式重现

  1. 创建一个小吃吧,并在活动中引用它
  2. 不要叫Snackbar.show()
  3. 打开和关闭活动
  4. 请注意,该活动是不是垃圾收集,因为小吃吧有对它的引用

原因

SnackbarBaseLayout呼叫addTouchExplorationStateChangeListener()在构造函数和removeTouchExplorationStateChangeListener()onDetachedFromWindow()addTouchExplorationStateChangeListener()可能应叫onAttachedToWindow(),因为SnackbarBaseLayout除非没有连接到窗口Snackbar.show()被调用。

解决方法1

更新AndroidX和使用com.google.android.material.snackbar.Snackbar来代替。https://github.com/GC-Xi/SnackbarBug/tree/solution1

解决方案2

不要创建小吃吧,除非你准备好证明这一点。https://github.com/GC-Xi/SnackbarBug/tree/solution2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么指向同一个内存的多个共享指针会导致内存泄漏?

为什么使用QtConcurrent在另一个线程中读取图像似乎会导致内存泄漏?

为什么一个代码会产生内存泄漏,而另一个却不会呢?

GC是否会将整个对象保留在内存中,而内部指针仍保留到一个字段?这会导致内存泄漏吗?

为什么此JavaScript会导致内存泄漏?

为什么调用堆栈数组会导致内存泄漏?

为什么使用“ new”会导致内存泄漏?

为什么重复调用FileOpenDialog会导致内存泄漏?

为什么基本的Swift代码会导致内存泄漏?

为什么嵌套的initializer_list会导致内存泄漏

为什么此功能会导致内存泄漏?

一个TickObject到底是什么?如何防止它成为内存泄漏?

为什么没有为方法/构造函数的第一个参数命名?

为什么Rxjava可能导致内存泄漏

Delphi:为什么这会导致内存泄漏?

内存泄漏,如何使用MS Visual Studio 2012检测到是什么原因导致的?

是什么原因导致尝试在React中使用Vanilla Tilt的原因是“ TypeError:Object(...)不是一个函数”?

为什么 Devel::LeakTrace 会泄漏内存?

numpy:创建一个空数组会导致内存错误?

Java: 问题:这个程序是否会在每次通过一个方法时创建 java 数组而泄漏内存?

是否可以将泄漏的内存从另一个进程中释放出来?

如果我将POD结构分配给另一个POD结构,是否存在内存泄漏?

是否将char *指向另一个字符串文字泄漏内存?

为什么“一个范围提案”为每个视图都包含两个名称,是否有特定的原因?

不带挂断调用的ManuallyDrop是否会导致内存泄漏?

引用数组索引是否会导致内存泄漏?

BeginInvokeOnMainThread方法是否会循环并导致内存泄漏?

自定义ClassLoader是否会导致内存泄漏?

Android匿名asyncTask-是否会导致内存泄漏

TOP 榜单

热门标签

归档