Android 从前台删除应用程序时使用work manager下载数据
我在做什么:Android 从前台删除应用程序时使用work manager下载数据,android,android-workmanager,Android,Android Workmanager,我在做什么: 我需要从后台下载一个100MB的文件 我正在使用work manager进行改装以实现这一点 我正在从工作经理处启动改装 这是一次下载(一旦我下载了文件。我不需要在后台运行的服务再次下载) 正在发生的事情: 如果我把应用程序放在前台,我就能成功地 下载该文件 但在启动worker线程后,我会关闭应用程序。我 请注意,文件不能在后台下载 问题:如何确保所有100 mb文件在后台下载完成 在我正在发起的活动中: final WorkManager mWorkManager
- 我需要从后台下载一个100MB的文件
- 我正在使用work manager进行改装以实现这一点
- 我正在从工作经理处启动改装
- 这是一次下载(一旦我下载了文件。我不需要在后台运行的服务再次下载)
- 如果我把应用程序放在前台,我就能成功地 下载该文件
- 但在启动worker线程后,我会关闭应用程序。我 请注意,文件不能在后台下载
在我正在发起的活动中:
final WorkManager mWorkManager = WorkManager.getInstance(context);
final OneTimeWorkRequest mRequest = new OneTimeWorkRequest.Builder(DictionaryWorker.class)
.setConstraints(new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(true)
.setRequiresStorageNotLow(true)
.build())
.addTag(DICTIONARY_WORKER_TAG)
.build();
mWorkManager.enqueue(mRequest);
public class DictionaryWorker extends Worker {
private final String CURRENT_SCREEN = DictionaryWorker.this.getClass().getSimpleName();
private static final String WORK_RESULT = "work_result";
private Context context;
private NetworkComponent networkComponent;
public DictionaryWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
this.context = context;
}
@NonNull
@Override
public Result doWork() {
initCnxNetworkConnection(context);
Data outputData = new Data.Builder().putString(WORK_RESULT, "Jobs Finished").build();
return Result.failure(outputData);
}
private RandomUsersApi getNetworkService(Context context) {
if(networkComponent==null){
networkComponent = DaggerNetworkComponent.builder()
.contextModule(new ContextModule(context))
.networkModule(new NetworkModule())
.okHttpClientModule(new OkHttpClientModule())
.build();
}
return networkComponent.getService();
}
/********************************************************** RETROFIT *************************************************/
private void initCnxNetworkConnection(final Context context) {
try{
Call<ResponseBody> call = getNetworkService(context).downloadDictionary();
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//File is downloaded here and written to storage
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Timber.e(CURRENT_SCREEN, "error");
}
});
}catch (Exception ex){
incompleteDownload();
Timber.e(CURRENT_SCREEN, "error%s", ex);
}
}
/********************************************************** RETROFIT *************************************************/
}
工人阶级:
final WorkManager mWorkManager = WorkManager.getInstance(context);
final OneTimeWorkRequest mRequest = new OneTimeWorkRequest.Builder(DictionaryWorker.class)
.setConstraints(new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(true)
.setRequiresStorageNotLow(true)
.build())
.addTag(DICTIONARY_WORKER_TAG)
.build();
mWorkManager.enqueue(mRequest);
public class DictionaryWorker extends Worker {
private final String CURRENT_SCREEN = DictionaryWorker.this.getClass().getSimpleName();
private static final String WORK_RESULT = "work_result";
private Context context;
private NetworkComponent networkComponent;
public DictionaryWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
this.context = context;
}
@NonNull
@Override
public Result doWork() {
initCnxNetworkConnection(context);
Data outputData = new Data.Builder().putString(WORK_RESULT, "Jobs Finished").build();
return Result.failure(outputData);
}
private RandomUsersApi getNetworkService(Context context) {
if(networkComponent==null){
networkComponent = DaggerNetworkComponent.builder()
.contextModule(new ContextModule(context))
.networkModule(new NetworkModule())
.okHttpClientModule(new OkHttpClientModule())
.build();
}
return networkComponent.getService();
}
/********************************************************** RETROFIT *************************************************/
private void initCnxNetworkConnection(final Context context) {
try{
Call<ResponseBody> call = getNetworkService(context).downloadDictionary();
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//File is downloaded here and written to storage
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Timber.e(CURRENT_SCREEN, "error");
}
});
}catch (Exception ex){
incompleteDownload();
Timber.e(CURRENT_SCREEN, "error%s", ex);
}
}
/********************************************************** RETROFIT *************************************************/
}