android - 处理程序中的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);
}
解决方案
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);
}
推荐阅读
- vba - 将数据从 SQL Server 加载到 Excel 的最快方法
- javafx - 将 ImageView 装入 TreeTableCell
- python - 抑制子类文档字符串中的“基类继承的方法”
- scala - 相当于 akka-http 中经过身份验证的路由?
- node.js - 如何在 nodejs 控制器中添加中间件?
- java - Lottie Android Studio 错误 Appcompat
- php - 如何使用 PHP 自动发布?
- python - 基于同一元素中的条件属性打印属性值(XML Python)
- firebase - 检索活动供稿:Firebase
- mysql - MySql 到 MS Access 查询转换