Android 多次伐木
Android Timber logging multiple times
考虑以下简单设置。 1 个片段和 1 个视图模型:
片段
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")
})
}
}
ViewModel
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 发表评论后,我意识到问题可能来自片段实际涉及之前发生的某些操作。长话短说:我有一个 multi-module 项目:1 个应用程序模块、1 个数据模块和 1 个网络模块。
网络模块和应用程序模块都在种植 Timber DebugTree...所以所有内容都被记录了两次 facepalm
我搜索了一下有没有什么好的方法可以让模块在这方面保持独立。我唯一能找到的就是这个 SO 答案:
object TimberLogImplementation {
fun initLogging() {
if(Timber.treeCount() != 0) return
if (BuildConfig.DEBUG) Timber.plant(DebugTree())
else Timber.plant(ReleaseTree())
}
}
考虑以下简单设置。 1 个片段和 1 个视图模型:
片段
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")
})
}
}
ViewModel
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 发表评论后,我意识到问题可能来自片段实际涉及之前发生的某些操作。长话短说:我有一个 multi-module 项目:1 个应用程序模块、1 个数据模块和 1 个网络模块。 网络模块和应用程序模块都在种植 Timber DebugTree...所以所有内容都被记录了两次 facepalm
我搜索了一下有没有什么好的方法可以让模块在这方面保持独立。我唯一能找到的就是这个 SO 答案:
object TimberLogImplementation {
fun initLogging() {
if(Timber.treeCount() != 0) return
if (BuildConfig.DEBUG) Timber.plant(DebugTree())
else Timber.plant(ReleaseTree())
}
}