我正在使用LoaderManager获取一些数据,当它完成时应该显示一个子片段。 在某些情况下,当活动已暂停并且无法执行片段事务时,会发生这种情况。
有没有一种方法可以获取活动的当前状态(似乎有一个mResume标志)?或者我必须维护自己的布尔值?
我正在使用LoaderManager获取一些数据,当它完成时应该显示一个子片段。 在某些情况下,当活动已暂停并且无法执行片段事务时,会发生这种情况。
有没有一种方法可以获取活动的当前状态(似乎有一个mResume标志)?或者我必须维护自己的布尔值?
新的架构组件允许您使用以下功能:
this.getLifecycle().getCurrentState()
快速查看源代码中的Activity类表明,Activity类确实使用成员变量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
}
}
}
Activity
上使用断点(例如,在onResume
方法中设置一个断点),然后使用评估表达式窗口,你可以通过右键单击Debug菜单窗口并从中选取它(或者对于Mac用户,使用SHIFT + F8)。打开窗口后,你可以使用以下代码在Evaluate Expression Window中拦截当前状态(取决于你设置断点的位置):getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)
true
,那意味着你的Activity
当前处于恢复状态。如果是false
,则处于另一个状态。