【问题标题】:Launch coroutine before create the activity Android在创建活动 Android 之前启动协程
【发布时间】:2021-01-25 16:09:28
【问题描述】:

在渲染活动之前我需要做一份工作

设置内容视图

这个例子是否正确,如果不是,在这种情况下午餐协程的最佳方式是什么

 override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
    lifecycleScope.launchWhenCreated {
        if (dataStoreRepository.getLanguage() == ARABIC)
            window.decorView.layoutDirection = View.LAYOUT_DIRECTION_RTL
        else
            window.decorView.layoutDirection = View.LAYOUT_DIRECTION_LTR
    }
    super.onCreate(savedInstanceState, persistentState)
}

【问题讨论】:

    标签: android android-activity android-lifecycle coroutine


    【解决方案1】:

    这不是执行此操作的最佳位置,因为您需要阻塞主线程,并且可能会导致一些丢帧(尤其是在速度较慢的设备上)。

    更好的地方:

    • 在应用程序类中,在创建任何活动之前(将布局方向存储在可以轻松访问的某个位置...共享首选项等)。
    • 在紧接这一活动进行的活动中(如果有的话)。

    在这两种情况下,您最好显示进度指示器并锁定 UI 以避免任何丢帧。

    【讨论】:

    • 我不知道如何从我的 BaseActivity 访问应用程序,您对如何访问该信息有任何想法
    • 当然,您通常不会从您的活动中访问它,您将创建一个扩展 Application 的新类并将其列在清单文件中。可以在这里找到解释它的教程:medium.com/droid-log/android-application-class-a8a1d64c82d1
    • 非常感谢你,你是最棒的,我接受了你的回答,现在我标记为有用。多谢:)
    • 没问题,很高兴为您提供帮助!
    • 但是有这样的情况,我应用了文章例子,但是window对象只允许在activity中,我试过这个解决方案但是我的问题不在应用程序中,我需要在一个活动,现在如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 2011-12-09
    • 2021-08-28
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多