Вход в Android Timber несколько раз - PullRequest
0 голосов
/ 22 июня 2019

Рассмотрим следующую простую настройку.1 фрагмент с 1 ViewModel:

Fragment

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 до трех раз ??

D/###: Test
D/###: whattt
D/###: Test
D/###: Test
D/###: whattt
D/###: whattt

1 Ответ

0 голосов
/ 24 июня 2019

После комментария от @tynn я понял, что проблема может быть вызвана некоторыми действиями, происходящими до того, как фрагмент действительно задействован. Короче говоря: у меня есть многомодульный проект: 1 модуль приложения, 1 модуль данных и 1 сетевой модуль. И сетевой модуль, и модуль приложения устанавливали Timber DebugTree ... Итак, все было зарегистрировано дважды facepalm

Я немного искал, есть ли хороший способ сохранить независимость модулей в этом отношении. Единственное, что я смог найти, - это ТАК ответ:

https://stackoverflow.com/a/53872754/990129

class TimberLogImplementation {
companion object {
    fun initLogging() {
        if(Timber.treeCount() != 0) return
        if (BuildConfig.DEBUG) Timber.plant(DebugTree())
        else Timber.plant(ReleaseTree())
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...