android - 如何设置 WorkManager 在后台上传
问题描述
我如何使用workmanager进行后台上传工作,我有通过FTP将我的文件备份到电脑的应用程序,我想学习新方法,因为在我的手机上,旧方法只有在我启动并运行应用程序时才有效我关闭应用程序后台任务停止。谁能帮我设置workmanager
class Working(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
private val TAG = ""
private val SERVER = ""
private val USERNAME = ""
private val PASSWORD = ""
private val PATH = ""
private val timer = Timer()
override fun doWork(): ListenableWorker.Result {
Log.i(TAG, "UploadJobService onStartJob")
UploadFile(applicationContext).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, PATH, SERVER, USERNAME, PASSWORD)
var uploadTask = UploadFile(applicationContext)
timer.schedule(UploadTick(uploadTask, applicationContext),0, 1 * 10000)
return UploadTick.Result.SUCCESS
}
internal class UploadTick(task: UploadFile, ctx: Context): TimerTask() {
private val SERVER = ""
private val USERNAME = ""
private val PASSWORD = ""
private val PATH = ""
private var _task = task
private val _context = ctx
override fun run() {
Log.d("UploadTick", _task.status.toString())
if(_task.status == AsyncTask.Status.PENDING) {
_task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, PATH, SERVER, USERNAME, PASSWORD)
} else if(_task.status == AsyncTask.Status.FINISHED) {
_task = UploadFile(_context)
_task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, PATH, SERVER, USERNAME, PASSWORD)
}
}
}
companion object {
private val TAG = UploadTick::class.java.simpleName
}
}
解决方案
两种解决方案:
使用带有 IntentService 的警报管理器来定期安排任务,即使应用程序在后台,如下所示:
final AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); final Intent i = new Intent(context, UpdateService.class); if (pendingIntent == null) { pendingIntent = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); } manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), INTERVAL_TIME_MILLIS, pendingIntent); }
使用工作管理器并定期安排它,如下所示:
WorkManager.getInstance().enqueue(new PeriodicWorkRequest.Builder(FiveDayDataApiDownloader.class, 24, TimeUnit.HOURS).setConstraints(new Constraints.Builder().setRequiresBatteryNotLow(true).build()).build());
推荐阅读
- javascript - 我可以将 EventListener 添加到我在 innerHTML 中创建的类中吗
- amcharts - 每个切片的 AmCharts 饼图颜色(优先级图)
- wampserver - OSPOS(开源销售点)不适用于带有 wampserver 的 localhost
- ios - React Native KeyboardAvoidingView 在 ios 上不起作用
- excel - VBA Excel 运行时错误 13 类型不匹配
- javascript - 如何通过比较表格等时间表来动态更改单元格的颜色
- r - 如何用均值和 SD 求解 R 中的方程?
- pandas - 将具有 AM/PM 的对象转换为以小时为单位的日期时间向下舍入
- ssl - 客户端上的 Mosquitto docker Socket 错误
, 断开 - javascript - 如何使我的分区在单击时更改颜色?