我正在创建一个应用程序,用户可以在其中输入特定的字节值,并且正在使用工作管理器为他们模拟上传进度。所以,基本上就是这样:
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
是我的活动。
UploadFile.setUploadProgress(int progress)
是我活动中的静态函数,看起来像这样:
public static void setUploadProgress(int progress) {
progressBar.setProgress(progress);
}
progressBar
是我的进度条,定义为:
private static ProgressBar progressBar;
但这是静态的,因此逻辑上有内存泄漏是合理的。我知道我们可以在AsyncTask中使用ThreadLocal<>()
来避免这种情况,但是我们可以在活动中使用带有静态函数的某些东西来避免内存泄漏吗?还是有更好的方法来做到这一点?
如果这是重复的,请指出正确的方向,因为我什么也找不到。
答案 0 :(得分:1)
WorkManager适用于后台作业。据我所知,您只能输出WorkManager的最终结果,并在代码中随心所欲地对其进行处理-请注意,您可以从CoroutineWorker扩展以处理协程,也可以从RxWorker扩展以处理RxJava2。如果您是我,则仅在应用程序进入后台时,才将上传进度限定为正在运行的活动/片段,并将其专用于WorkManager。从WorkManager中,我可以生成通知,该通知将通知用户有关进度。