java - ProgressBar 更改进度
问题描述
我正在创建一个应用程序,用户可以在其中输入特定的字节值,并且我正在使用工作管理器来模拟他们的上传进度。所以,基本上是这样的:
int size = 50000; // Depends on what kind of file size the user wants to mimic
for(int i = 0; i < size; i++) {
//Increase progress
UploadFile.setUploadProgress(i);
}
此代码在工作管理器中。这UploadFile.java
是我的活动。
WhileUploadFile.setUploadProgress(int progress)
是我活动中的静态函数,如下所示:
public static void setUploadProgress(int progress) {
progressBar.setProgress(progress);
}
progressBar
是我的进度条,定义为:
private static ProgressBar progressBar;
但这是静态的,因此发生内存泄漏是合乎逻辑的。我知道我们可以ThreadLocal<>()
在 AsyncTask 中使用来避免这种情况,但是我们可以在活动中使用什么东西并使用静态函数来避免内存泄漏?还是有更好的方法来做到这一点?
如果这是重复的,请指出正确的方向,因为我找不到任何东西。
解决方案
WorkManager 用于后台作业。据我所知,您只能输出 WorkManager 的最终结果,并在代码中随心所欲地使用它 - 请注意,您可以从 CoroutineWorker 扩展来处理协程或从 RxWorker 扩展来处理 RxJava2。如果我是你,我会将上传进度限定为正在运行的活动/片段,并且仅当应用程序进入后台时才将其专用于 WorkManager。从 WorkManager,我可以生成通知,通知用户进度。
推荐阅读
- php - 在 Laravel 中将本地文件视为上传的文件
- python - 如何使用具有相同值计数的 Python rank()?
- ruby-on-rails - 在 Rubymine 控制台中以一行显示 Savon SOAP(xml) 响应
- ios - iOS-不工作声纳脚本'run-sonar-swift'
- pdf - 在 AWS Lambda 上从 TIFF 转换为 PDF 的最简单方法
- linux - 主机 SMBus 控制器未启用
- java - `server.servlet.session.persistent` 的默认值
- date - 用VBScript格式化前一天的日期格式yyyymmdd
- modeling - 找不到对应的内部声明(Modelica 内部/外部)
- extjs - Extjs如何一次加载多个资源