android - Android Timber 多次记录
问题描述
考虑以下简单设置。1 个片段和 1 个 ViewModel:
分段
class TestFragment : Fragment() {
private val viewModel by lazy {
ViewModelProviders.of(this).get(TestViewModel::class.java)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_test, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.testLiveData.observe(viewLifecycleOwner, androidx.lifecycle.Observer {
Log.d("###", "whattt")
})
}
}
视图模型
class TestViewModel : ViewModel() {
private val myVariable = Log.d("###", "Test")
val testLiveData = MutableLiveData(false)
}
为什么我从 Fragment 和 ViewModel 都获得了最多 3 次的日志输出?
D/###: Test
D/###: whattt
D/###: Test
D/###: Test
D/###: whattt
D/###: whattt
解决方案
在@tynn 发表评论后,我意识到问题可能来自在片段实际涉及之前发生的一些操作。长话短说:我有一个多模块项目:1 个应用程序模块、1 个数据模块和 1 个网络模块。网络模块和应用程序模块都在种植 Timber DebugTree ...所以所有内容都记录了两次facepalm
如果有一个好方法可以在这方面保持模块独立,我进行了一些搜索。我唯一能找到的就是这个答案:
https://stackoverflow.com/a/53872754/990129
object TimberLogImplementation {
fun initLogging() {
if(Timber.treeCount() != 0) return
if (BuildConfig.DEBUG) Timber.plant(DebugTree())
else Timber.plant(ReleaseTree())
}
}
推荐阅读
- angular - Stripe Payments with Angular 错误:“客户 | 类型”上不存在“属性”来源 已删除客户'
- python - Python 垃圾收集器的行为与 _ 单下划线变量名称是否有任何不同,它真的是一个“一次性”变量吗?
- python - 内置 iter() 函数和 for 语句
- nginx - Nginx 子域服务器块不断重定向到 Centos 7 中的主域
- r - RMarkdown:将代码包装成块,但在管道后保持中断
- angular - 如何在不更改页面的情况下触发路由器守卫
- javascript - 如何在选中时设置值 true,在未选中时设置 false
- c++ - 在额外线程中运行 QML 方法
- c++ - c ++从开始迭代器到结束迭代器并执行操作
- powershell - 执行移动项目时如何附加文件名