我想安排每晚数据库更新.所以我使用新的Android WorkManager.我的理解是,一旦安排它将始终独立于应用程序的生命周期在后台运行.是对的吗?我的第一次测试显示Work只在应用程序运行时执行.
val locationWork = PeriodicWorkRequest.Builder(UpdateDatabaseWorker::class.java, 24, TimeUnit.HOURS)
.addTag("DATABASE_UPDATE_SERVICE")
.build()
WorkManager.getInstance().enqueue(locationWork)
Run Code Online (Sandbox Code Playgroud) 我有一个房间查询:
@Query("SELECT * FROM classes WHERE _id IN(:values) ORDER BY date DESC")
fun getClassesByIds(values: List<Int>): Maybe<List<YClass>>
Run Code Online (Sandbox Code Playgroud)
compositeDisposable.add(viewModel.getClassesById(classesTaken)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSuccess { list ->
list.forEach {
setupInfo(student)
}
}
.doOnError { it.printStackTrace() }
.subscribe())
Run Code Online (Sandbox Code Playgroud)
当我从活动导航回来时,结果为空应用程序崩溃。实际上崩溃是在执行另一个查询时发生的。即使没有任何问题,第二个查询也会出错。
引起:android.arch.persistence.room.EmptyResultSetException:查询返回空结果集:SELECT * FROM classes WHERE _id IN() ORDER BY date DESC
03-06 00:07:53.476 31132-31199/? I/InputDispatcher: 窗口 'Window{135734f u0 com.labfoodandfriends.nikitagudkovs.jlog/com.labfoodandfriends.nikitagudkovs.jlog.activity.student_and_teacher.StudentOverview}' 花了 4249.1ms 处理最后一个输入事件:KeyEvent(deviceId) =0x00000101,动作=1,标志=0x00000048,keyCode=4,scanCode=0,metaState=0x00000000,repeatCount=0),policyFlags=0x6b000002 03-06 00:07:53.612/1373.612-137d I/zygote64:编译器分配了 6MB 来编译 void android.view.ViewRootImpl.performTraversals() 03-06 00:07:53.661 13731-13736/com.labfoodandfriends.nikitagudkovs.jlog I/zygote64:代码=全码缓存集合502KB, data=339KB 03-06 00:07:53.662 13731-13736/com.labfoodandfriends.nikitagudkovs.jlog I/zygote64:代码缓存收集后,
在 io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704) 03-06 00:07:55.875 13731-13731/com.labfoodandfriends.nikitagudkovs.jlog W/
System.reerr …
我正在尝试设置Room数据库备份功能。问题是,一旦下载,sql数据库文件在应用程序中将不包含最新的数据集。它总是会丢失一些最新记录。是否有导出会议室数据库的正确方法?PS:使用sqliteHelper处理我的数据库时,我没有遇到类似的问题,因此我想它一定与Room有关。
我这样做的方式:
@Throws(IOException::class)
private fun copyAppDbToDownloadFolder(address: String) {
val backupDB = File(address, "studioDb.db")
val currentDB = applicationContext.getDatabasePath(StudioDatabase.DB_NAME)
if (currentDB.exists()) {
val src = FileInputStream(currentDB).channel
val dst = FileOutputStream(backupDB).channel
dst.transferFrom(src, 0, src.size())
src.close()
dst.close()
}
}
Run Code Online (Sandbox Code Playgroud) 我注意到,当我浏览 iOS 应用程序时,内存堆栈会随着每个打开的 viewController 的增加而增长。
我的导航基于转场,并且self.dismiss()在执行每个转场之前都会进行导航。不过,看起来 viewControllers 堆栈在内存中。
我怎样才能避免这种情况?
在 Android 中,finish()会杀死 Activity(在大多数情况下),因此我需要在 iO 中找到替代方案。
android ×3
android-room ×2
android-sql ×1
ios ×1
maybe ×1
rx-java2 ×1
sql ×1
swift ×1
xcode ×1