检查生命周期状态

时间:2013-07-09 05:44:02

标签: android android-fragments android-lifecycle

public class MyFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public void onResume() {
        super.onResume();

        if (?) {
            ... handle ...
        }
    }

    @Override
    public void onPause() {
        super.onPause();

        if (?) {
            ... handle ...
        }
    }
}

我正在尝试使用一个实例保留片段来处理onResume()onPause()期间的某些事情。我已经将它添加到主要活动中,到目前为止,除了一件事之外,它工作得很好。如果我在应用程序中输入另一个Activity,让我们说应用程序设置,这个片段仍会在屏幕翻转时执行onResume和onPause。

我需要的是一种方法来确定此片段所附加的活动是否不在前台。我尝试过像isTaskRoot这样的东西,但只要执行这些生命周期方法,它就会返回true。现在如果Android知道在运行onResume之后将这个片段暂停,那么必须有一种方法可以在onResume方法中检查这个吗?

2 个答案:

答案 0 :(得分:2)

调用onPause()时,活动变为非前景。 活动在调用onResume()时成为前景。

http://developer.android.com/guide/components/activities.html#Lifecycle

查找

的一种方法
  

该片段附加到的活动是否不在   前景

是让活动在活动的isForeground = false方法中设置onPause(),并在活动的isForeground = true方法中设置onResume(),并通过此片段将此标记设为可用一个类似于described here的回调接口。唯一的区别是将片段事件推送到Activity,片段将读取活动状态(例如,SomeInterface.getForeground())。

另一种方法是定义公共方法MyFragment.setForeground(boolean foreground),并使活动从其onPause()onResume()方法调用此方法。

答案 1 :(得分:2)

只需使用活动功能hasWindowFocus()即可。这对我有用。并且您可以使用它设置一个标志来完成一个动作,以便在Activity返回焦点并检查onResume()中的标志时。