Big*_*air 5 android mvvm broadcastreceiver viewmodel android-viewmodel
我有每隔几天发送一次的提醒通知。
该通知的发送由重复触发AlarmManager
。该通知本身是建立在onReceive
我的BroadcastReceiver
(如描述在这里)。所以当onReceive
被触发时,应用程序甚至没有打开/运行。
现在我想访问我的(本地)SQLite 数据库并获得正确的内容来构建通知,但是我如何ViewModelProvider
在这个地方获得一个(代码中的 xxx)来访问我的ViewModel
?
public void onReceive(Context context, Intent intent) {
NotificationViewModel viewModel =
ViewModelProviders.of(XXX).get(NotificationViewModel.class);
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
或者问一个更好的问题,这甚至是好的做法吗?
另一种可能性是PendingIntent
将触发 的所有内容填充到 中onReceive
,因此我可以在收到后一一检索它。但这会更难,因为它是一个重复的警报,每次都需要不同的内容,但只触发一次。
我查看了一些搜索结果,但它们没有解决我的问题:
读取LiveData 超出 ViewModel [...],据说
如果您的应用程序的一部分不影响 UI,则您可能不需要 LiveData。
所以这意味着我应该简单地使用上下文访问我的存储库并从中获取原始数据,而不需要 LiveData 包装器?
所以
public void onReceive(Context context, Intent intent) {
NotificationRepository rp = new NotificationRepository(context);
MessageNotification notification = rp.getNextNotification();
}
Run Code Online (Sandbox Code Playgroud)
代替
public void onReceive(Context context, Intent intent) {
NotificationViewModel viewModel =
ViewModelProviders.of(XXX).get(NotificationViewModel.class);
MessageNotification notification =
viewModel.getNextNotification().observe(XXX, new
Observer<MessageNotification>() {
@Override
public void onChanged(MessageNotification messageNotification) {
//do stuff
}
});
}
Run Code Online (Sandbox Code Playgroud)
但这是否违反了 MVVM 约定?
我应该使用其他架构吗?现在它对我来说似乎很有意义,因为它是我只检索一次并且不必观察变化的东西。
在这种情况下 ViewModel 的真正目的是什么?
它将您的数据转换为某种方便查看的格式吗?
它会处理数据更新吗?(我的意思是,会有数据更新吗?似乎你一会儿就会收到一个通知)
或者它只会混乱干净的同步代码并使其异步而没有真正的目的?
如果您仅对最后一个问题回答“是”,那么您可能不需要此处的 ViewModel:) 您需要其他架构吗?不,你不需要架构。您需要显示通知,所以就这样做吧!
如果你是真正的 MVVM 粉丝,你还是可以通过的。
首先,放弃,ViewModelProviders.of
因为这里无法使用。它需要活动或碎片,而你两者都没有。ViewModelProvider 的目的是在重新创建活动/片段时为您提供相同的视图模型实例 - 这显然不是您的情况。
其次,自己构建viewmodel:new NotificationViewModel()
。
第三,从视图模型返回普通对象而不是实时数据,因为您的数据不是实时的。
public class NotificationViewModel {
MessageNotification getNextNotification() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您甚至不需要扩展ViewModel
类,因为您不使用 ViewModelProviders。
归档时间: |
|
查看次数: |
2530 次 |
最近记录: |