我们知道LiveData 具有生命周期感知能力,如果配置发生更改,LiveData 对象不会每次都从数据库(本地/远程)重新查询,并且仅当数据有任何更新时才会更新。
最近我开始使用Kotlin Flow,我应该承认它最适合数据层,即在存储库中实现,以便通知 ViewModel。但我也在 ViewModel/View 层中使用了Kotlin Flow,以便直接根据其状态collect(密封类实现)来确定Fragment 中的 Flow 对象。我在使用 Flow 时遇到的问题是每次配置更改时都会从数据库(本地/远程)检索数据。
这种情况应该怎么办?有没有办法在使用 Flow 时避免重新查询,或者我应该只在 ViewModel/View 层中使用 LiveData?
示例代码
sealed class Status<T> {
class Processing<T> : Status<T>()
data class Completed<T>(val value: T) : Status<T>()
data class Error<T>(val error: String) : Status<T>()
companion object {
fun <T> processing() = Processing<T>()
fun <T> completed(value: T) = Completed(value)
fun <T> error(error: String) = Error<T>(error)
}
}
Run Code Online (Sandbox Code Playgroud)
回购协议:
class Repo(database: LocalDatabase){
fun retrieveUsersData() …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码加载我的模型。
def load_model(checkpoint_path):
'''
Function that loads a checkpoint and rebuilds the model
'''
checkpoint = torch.load(checkpoint_path, map_location = 'cpu')
if checkpoint['architecture'] == 'resnet18':
model = models.resnet18(pretrained=True)
# Freezing the parameters
for param in model.parameters():
param.requires_grad = False
else:
print('Wrong Architecture!')
return None
model.class_to_idx = checkpoint['class_to_idx']
classifier = nn.Sequential(OrderedDict([
('fc1', nn.Linear(512, 1024)),
('relu1', nn.ReLU()),
('dropout', nn.Dropout(0.2)),
('fc2', nn.Linear(1024, 102))
]))
model.fc = classifier
model.load_state_dict(checkpoint['state_dict'])
return model
Run Code Online (Sandbox Code Playgroud)
并且在跑步时
# Load your model to this variable
model = load_model('checkpoint.pt')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误,
RuntimeError Traceback …
android ×1
dart ×1
flutter ×1
kotlin ×1
kotlin-flow ×1
pageviews ×1
python-3.x ×1
pytorch ×1
resnet ×1