LeakCanary报告的AttachInfo.mRootCallbacks导致内存泄漏

时间:2015-07-14 14:22:29

标签: android memory-leaks leakcanary

我正在使用LeakCanary库来解决我的活动的内存泄漏问题。 修复了几个问题后,我得到了这个logcat输出:

  
      
  • com.MyPackage.activities.MyActivity已泄露:
  •   
  • GC ROOT com.MyPackage.MyView.mAttachInfo
  •   
  • 引用android.view.View $ AttachInfo.mRootCallbacks
  •   
  • 引用android.view.ViewRootImpl.mContext
  •   
  • 泄漏com.MyPackage.activities.MyActivity instance
  •   
  1. 我不知道这个参考是什么意思。视图是否保留对活动的引用,以防止它被GCed?何时以及如何处理?
  2. 我使用Eclipse memory analyze tool工具,发现实际上没有活动的实例存活。这有意义吗?
  3. 同时将此作为金丝雀的issue打开。

    编辑1:相关实施:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
         MyView.InteractionCallbacks interactionCallback = new InteractionCallbackImplementation(
         mNewView = new MyView(getActivity().getApplicationContext(), 
         LayoutInflater li = (LayoutInflater) getActivity().getApplicationContext().getSystemService(
                                                                                              Service.LAYOUT_INFLATER_SERVICE);
         ViewGroup fragmentLayout = (ViewGroup) li.inflate(R.layout.fragment_layout, container, false);
         fragmentLayout.addView(mNewView, 0);
    }
    
    public static class InteractionCallbackImplementation implements MyView.InteractionCallbacks {
    
            WeakReference<MyFragment> frag;
            public InteractionCallbackImplementation(MyFragment myFragment){
                frag = new WeakReference<myFragment>(myFragment);
            }
    
            @Override
            public void partsSelected(long[] parts) {
                   // ...
            }
    }
    

    观点: 是处理gl渲染的外部jar的一部分。有一个对片段的引用。

    public class MyView extends GLSurfaceView implements Renderer {
         private void runOnUiThread(Runnable runnable) {
              this.getHandler().post(runnable);
         }
    }
    

    我所知道的是,当我离开活动时:

    1. 活动被破坏,活动不再存在。
    2. 片段被破坏。
    3. 视图已分离。
    4. 那么为什么金丝雀图书馆声称 - 有一个泄露的参考?

      视图何时以及如何失去它对上下文的引用?

0 个答案:

没有答案