首页 > 解决方案 > 处理程序中的Android内存泄漏

问题描述

此函数使用计数值更新自定义进度,以便在 10 秒内开始,在 0 处停止,并且每毫秒更新进度以保持流畅。(注意“updateProgress”调用了一个 invalidate() 函数)

如果我使用正常进度,没关系,我没有内存泄漏,但如果我使用此代码,“Android profiler”检查器中的内存以 60mb 开始,但它会增加并且不会停止。

我需要使用自定义进度。

有没有更好的方法来实现它?

private void testing(){
    count = 10000;
    final Handler handler = new Handler();
    final Runnable runnable = new Runnable() {
        public void run() {
            if (count > 0){
                updateProgress(count);
                handler.postDelayed(this, 1);
            }
            count--;
        }
    };
    handler.post(runnable);
}

标签: androidmemory-leakshandlerandroid-progressbar

解决方案


1.每 100 毫秒(最好是 1 秒)使用一次处理程序,而不是 1 毫秒

private void testing(){
    count = 10000;
    final Handler handler = new Handler();
    final Runnable runnable = new Runnable() {
        public void run() {
            if (count > 0){
                updateProgress(count);
                handler.postDelayed(this, 100); //100 millsecond
            }
            count--;
        }
    };
    handler.post(runnable);
}

2.确保在 onstop 中移除处理程序回调

@Override
protected void onStop() {
    super.onStop();
   handler.removeCallbacks(runnable);
}

推荐阅读