权限申请是否应该放到 ViewModel 中
有此疑问的原因是,我看到权限相关的操作,需要传入 Context 参数。
private fun isLocationPermissionGranted(): Boolean {
return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED
}
而 Context 只能在 Activity / Fragment / View 中得到。
当然,也可以通过向 ViewModel 中函数传递 Context 参数来实现。 但这样存在风险,因为 ViewModel 的生命周期比 Activity / Fragment 要长, 对于需要长时间的操作,调用 Content 时,可能导致异常崩溃。
由此来看,其实蓝牙 BLE 相关操作也不应该放到 ViewModel 中。
scanResult.device.connectGatt(context, false, gattCallback)
这句话总结的很好:
Because ViewModel is/should be Businesslogic. Always think about testing (without Android device). Everything you are able to test > viewmodel. Everything UI relevanted stuff -> View.
Toast 等弹窗是否应该放到 ViewModel 中
确实不应该,因为也是跟 Android UI 相关的逻辑部分,可以采用监听 LiveData 的方式在 Activity / Fragment 中调用展示 Toast 的代码。
参考
- https://github.com/android/architecture-components-samples/issues/48
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式