我在理解android支持注释时遇到了@RestrictTo注释;这就解释了开发人员可以定义的不同范围。谁能举例说明如何使用这些注释?
任何线索将不胜感激!
我正在/尝试使用 WorkManager 和 MVVM 下载具有暂停和恢复功能的文件。
在这里,我正在使用 WorkManager 寻求暂停/恢复和下载百分比进度更新。所以我在这里分享我的课程。
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var downloadViewModel : DownloaderViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main)
downloadViewModel = ViewModelProviders.of(this).get(DownloaderViewModel::class.java)
binding.viewmodel = downloadViewModel
download_button.setOnClickListener({
startDownload()
})
cancel_button.setOnClickListener({
downloadViewModel.cancelDownloadWork(Constants.TAG_OUTPUT)
WorkUtils.deleteFile(WorkUtils.getIsbn(Constants.TAG_OUTPUT))
})
downloadViewModel.mSavedWorkStatus.observe(this, Observer {
it?.let {
}
if(it?.size!! > 0){
val workStatus = it.first()
val workState = workStatus?.state
downloadViewModel.updateDownloadWorkState(workState.toString())
WorkUtils.makeStatusNotification(workState.toString(),this.applicationContext)
}
})
pause_button.setOnClickListener({
downloadViewModel.cancelDownloadWork(Constants.TAG_OUTPUT)
val pausedAt = WorkUtils.getFileSize(WorkUtils.getIsbn(DOWNLOAD_URL))
Log.d("paused at","paused at $pausedAt")
})
resume_button.setOnClickListener({
val resumeFrom = WorkUtils.getFileSize(WorkUtils.getIsbn(DOWNLOAD_URL)) …Run Code Online (Sandbox Code Playgroud) 我正在使用WorkManager将数据从本地Room数据库同步到服务器。问题是Room给Loop.MainLooper()中的数据库生成错误,当我按照以下方式使用它时,它工作正常。但是我无法根据任务完成情况在SUCCESS或RETRY上返回“ WorkerResult”。Netwrok丢失时如何停止工作?
public class TestSyncManager extends Worker {
private final WorkerResult[] workerResult = {WorkerResult.SUCCESS};
// @Inject // Dagger2 has not added the support for dependency injection in worker yet.
private ApiHeader mApiHeader;
private HandlerThread mHandlerThread;
private Handler mHandler;
private Runnable mRunnable;
private DataManager dataManager;
@NonNull
@Override
public WorkerResult doWork() {
try {
//Looper.prepare();
CommonUtils.Log("usm_work_manager_1", "Work is Started.");
try {
checkNextCall();
} catch (Exception e) {
e.printStackTrace();
setWorkerResult(WorkerResult.FAILURE);
}
};
//mHandler = new Handler(Looper.myLooper());
mHandlerThread = new HandlerThread("LikesHandlerThread");
mHandlerThread.start();
Looper looper …Run Code Online (Sandbox Code Playgroud) AlarmManager当用户向任务添加截止日期时,我实现了发送通知的功能。但是,当用户关闭设备时,所有警报都将丢失。现在,我正在更新,BroadcastReceiver以接收android.intent.action.BOOT_COMPLETED和重新设置为每个任务设置的所有警报。
我的第一个尝试是将Rx Single所有任务的到期日都高于当前时间BroadcastReceiver,然后重新计划所有警报。问题是Observable一旦BroadcastReceiver没有生命周期,我将无法处置。同样,这似乎不是一个好方法。
在我的研究期间,IntentService对于这种情况,这是一个很好的解决方案,但是我进入了新WorkManager库,并且OneTimeWorkRequest看起来像是一个很好且简单的解决方案。
在Worker被调用和执行正确,但我不能够处理的Observable,因为该onStopped方法不会被调用。
这是基于此代码段的实现:
class TaskAlarmWorker(context: Context, params: WorkerParameters) :
Worker(context, params), KoinComponent {
private val daoRepository: DaoRepository by inject()
private val compositeDisposable = CompositeDisposable()
override fun doWork(): Result {
Timber.d("doWork")
val result = LinkedBlockingQueue<Result>()
val disposable =
daoRepository.getTaskDao().getAllTasks().applySchedulers().subscribe(
{ result.put(Result.SUCCESS) },
{ result.put(Result.FAILURE) }
)
compositeDisposable.add(disposable)
return try …Run Code Online (Sandbox Code Playgroud) android alarmmanager intentservice rx-android android-workmanager