1

我仅在应用程序启动时才尝试调用自定义对话框。

if (mGameActivity.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { 
     mDialogWinByLeft.show(mGameActivity.getSupportFragmentManager(), "");
}

但当前状态始终是 INITIALIZED。LifecycleRegistryOwner我在上面实现接口GameActivity

抱歉,如果我不太了解这个新的 api。谢谢

4

3 回答 3

3

根据您的描述,我会冒险猜测您正在检查状态onCreate。在onCreate生命周期中状态仅为INITIALIZED.

请参阅 Google 的此图表。 谷歌生命周期状态图(链接断开但可以在回程机器上访问)

也就是说,您可以使用注释库来观察您何时进入STARTED状态。

@OnLifecycleEvent(Lifecycle.EVENT.ON_START)
void doSomething(){
    //do the thing that needs the lifecycle to be at least started
}

也就是说,在每个 onStart 完成后都会调用它。因此,谨慎的做法可能是加入一些逻辑来确定这是否是做需要做的事情的合适时间。

同样为了使这段代码工作,观察生命周期事件的类必须实现LifecycleObserver。这可以是任何类,甚至是 Activity 或 Fragment 本身。以下代码适用于将充当生命周期观察者的通用类/模块。

public class LifeCycleObserverModule implements LifecycleObserver {
    LifeCycleObserverModule(Lifecycle lifecycle) {
        //register the life cycle to observe
        this.lifecycle = lifecycle;
        this.lifecycle.addObserver(this);
    }
}

如果您要让 Activity 观察它自己的生命周期,它将类似于:

public class MainActivity extends AppCompatActivity implements LifecycleObserver {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getLifecycle().addObserver(this)
    }
}

对于一个片段,它的工作方式相同,但它可以观察它自己的生命周期或活动的生命周期。如果你想让它观察 Activity 的生命周期,你可以这样做。否则,这将与上面的 Activity 示例相同。

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    getActivity().getLifecycle().addObserver(this);
}

最后一点,我不完全清楚观察自己的生命周期的活动或片段是否是最佳实践。但它确实有效,而且这样做似乎没有任何不良影响。我目前在我正在开发的几个应用程序中使用上述方法。

编辑:更正了示例代码。它曾经说过@OnLifecycleEvent(Lifecycle.EVENT.STARTED),正如评论中指出的STARTED那样不存在,正确的值是ON_START. 很抱歉混淆了。

于 2017-08-18T14:06:38.560 回答
0

Official documentation can be helpful to understand concept with example usage and graph: https://developer.android.com/topic/libraries/architecture/lifecycle#lc

Basic example with Kotlin:

if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
   //Do your work.
}
于 2022-01-14T18:55:49.607 回答
0

如果您在第一次初始化期间检查状态,例如在 onStart() 调用之后立即检查状态,则可以初始化生命周期状态。

在 Activity 或 Fragment 完全初始化后,您可以获得适当的生命周期状态。

因此,如果您使用 com.android.support:appcompat-v7:26.1.0,对于 android.support.v4.app.Fragment 或 AppCompatActivity,请使用以下内容:

lifecycle.currentState.isAtLeast(Lifecycle.STATE.STARTED)

大多数情况下不需要创建自定义 LifecycleObserver。

于 2017-10-25T13:03:13.550 回答