获取活动状态(暂停/恢复)

时间:2015-03-28 18:01:39

标签: android android-fragments

我使用LoaderManager获取一些数据,当它完成时,应该显示一个子片段。在某些情况下,当活动已处于暂停状态且无法执行片段事务时,会发生这种情况。

有没有办法获取活动的当前状态(似乎有一个mResume标志)?或者我是否必须维护自己的布尔值?

3 个答案:

答案 0 :(得分:5)

快速查看活动source code表示活动类确实跟踪成员 mResumed 的恢复状态。但由于 mResume 不公开, isResumed()被隐藏,我们无法使用它们。

您可以使用简单的解决方案为您提供所有课程的信息。只需创建一个存储状态的基本Activity类。例如:

public class ActivityBase extends Activity {

    private boolean mIsResumed = false;

    @Override
    public void onResume() {
        super.onResume()
        mIsResumed = true;
    }

    @Override
    public void onPaused() {
        super.onPaused()
        mIsResumed = false;
    }

    public boolean isResumed() {
        return mIsResumed
    }

}

只需在课堂上扩展此课程:

public class MyActivity extends ActivityBase {

    private void onLoadDone() {
        if (isResumed()) {
            // Show the fragment
        }
    }

}

答案 1 :(得分:5)

The new Architecture Components allow you to do it with:

this.getLifecycle().getCurrentState()

答案 2 :(得分:0)

可以实现此目的的一种方法是在Activity上使用断点(例如,在onResume方法中使用断点),然后使用您可以通过以下方式打开“评估表达式”窗口:在您的 Debug菜单窗口上单击鼠标右键,然后从中选择它(或SHIFT + F8)(对于Mac)。打开后,您可以在“评估表达式”窗口中使用以下行来截取当前状态(取决于断点的位置):

getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)

如果返回true,则表示您的Activity当前处于<​​strong>恢复 状态。 如果为false,则处于另一状态。

他们还有许多其他状态可以使用,只需选中here