计时器的内存泄漏

计时器的内存泄漏,第1张

概述我使用的计时器在监听器事件中被取消并重新启动.除了计时器线程会泄漏整个外部类之外,其他所有方法都工作正常.我的计时器实现如下:if(timer!=null){timer.cancel();timer=null;timer=newTimer();}tim

我使用的计时器在监听器事件中被取消并重新启动.除了计时器线程会泄漏整个外部类之外,其他所有方法都工作正常.

我的计时器实现如下:

        if(timer != null) {            timer.cancel();            timer = null;            timer = new Timer();        }        timer.schedule(new TimerTask() { // Thread leaks!!!!            @OverrIDe            public voID run() {              mCallback.onheaderMoving(newToolbarTranslationY );            }        } , 150);

我使用MAT分析器来追踪问题并最终解决了问题.我还注释掉了与回调相关的行,但是线程仍然泄漏,因此它本身就是计时器.但是,我不太了解该代码的问题.

据我的研究了解,问题在于匿名内部类(新的Timertask())持有对外部类的引用,因此可能泄漏整个上下文.但是我仍然不明白为什么在线程用完之后(150 ms之后)为什么不对计时器以及对上下文的引用进行垃圾回收.

在这种情况下,即使线程完成后,上下文是否仍然不被释放?

最后,我该如何解决此泄漏?我将计时器设置为null,但这并不能解决我的问题.

编辑

 private OnheaderMovingCallBack mCallback; private Timer timer = new Timer(); //... some other parameterspublic ScrollingToolbarManager(VIEw toolbar , VIEw pagerStrip , AbsListVIEw ListVIEw , OnheaderMovingCallBack headerMovingCallBack){    this.toolbar = toolbar;    this.pagerStrip = pagerStrip;    this.ListVIEw = ListVIEw;    mCallback = headerMovingCallBack;    changeStartValues();}public static interface OnheaderMovingCallBack{    public voID onheaderMoving(int translationY);} public voID moveheader(){      //... some calculations    //timer implementation from above }

在ListvIEw的滚动事件上调用moveheader()

解决方法:

如果您认为问题在于匿名内部类拥有对外部类的引用,则只需使用静态命名的内部类-这将不包含任何引用.在您的班级中放入以下内容:

static class MyTimerTask extends TimerTask {    private OnheaderMovingCallBack mCallback;    int newToolbarTranslationY;    public MyTimerTask(OnheaderMovingCallBack mCallback, int newToolbarTranslationY) {        this.mCallback = mCallback;        this.newToolbarTranslationY = newToolbarTranslationY;    }    @OverrIDe    public voID run() {        mCallback.onheaderMoving(newToolbarTranslationY);    }}
总结

以上是内存溢出为你收集整理的计时器的内存泄漏全部内容,希望文章能够帮你解决计时器的内存泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存