Android: activity 恢复时黑屏闪烁
Android: Black screen flashes when activity resumes
我创建的 TabbedActivity
有问题。
我注意到,如果我将我的应用程序置于后台,然后将其带回前台,在布局重新出现之前,屏幕会变黑一会儿。看起来 activity 正在重新创建,但我已经确认 onCreate()
在应用程序恢复时未被调用。
我在activity中的onResume()
和onStart()
方法中设置了断点,看什么时候出现黑屏。当应用程序返回前台时,调用 onStart()
,然后调用 onResume()
,然后屏幕闪黑一秒钟。在此之后,布局重新出现。此处显示:
我想指出这个 activity 的 onCreate()
和 onResume()
方法除了调用它们的超类之外是空的。上面 gif 中显示的片段甚至没有覆盖 onResume()
或 onCreate()
方法。此外,在我的应用程序中的其他非选项卡式活动中,这种行为不会发生 - 它只发生在 TabbedActivity
.
如果需要更多信息,请告诉我,我很乐意提供。我只是不确定这个问题可能发生在哪里。
编辑:
当我注释掉 ANOTHER FRAGMENT 的 onResume()
方法的内容时,我意识到这种情况不再发生。该方法如下所示:
@Override
public void onResume() {
super.onResume();
System.out.println("RESUME");
if (mShowCamera != null)
{
mShowCamera.camera = null;
}
mCamera = Camera.open();
mShowCamera = new ShowCamera(getContext(), mCamera);
mMainCamLayout = (FrameLayout)getView().findViewById(R.id.camLayout);
mMainCamLayout.addView(mShowCamera);
Camera.Parameters cameraParameters = mCamera.getParameters();
cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
if (cameraParameters.getSupportedFocusModes() != null &&
cameraParameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
{
mCamera.setParameters(cameraParameters);
}
}
已解决。问题是当我的应用程序重新成为焦点时,有很多工作要做。这导致加载 activity 所需的时间增加。
这个 activity 附有一些片段。造成此问题的一个因素是尝试缓存太多片段,如下所示:
ViewPager mViewPager = findViewById(R.id.view_pager);
mViewPager.setOffscreenPageLimit(4);
最大限度地减少 off-screen 页面的数量使我的 activity 的初始加载速度明显加快。
如果您的 activity 加载时间很长,请尝试减少它在 OnCreate 和 OnResume 方法中必须完成的工作量。
我创建的 TabbedActivity
有问题。
我注意到,如果我将我的应用程序置于后台,然后将其带回前台,在布局重新出现之前,屏幕会变黑一会儿。看起来 activity 正在重新创建,但我已经确认 onCreate()
在应用程序恢复时未被调用。
我在activity中的onResume()
和onStart()
方法中设置了断点,看什么时候出现黑屏。当应用程序返回前台时,调用 onStart()
,然后调用 onResume()
,然后屏幕闪黑一秒钟。在此之后,布局重新出现。此处显示:
我想指出这个 activity 的 onCreate()
和 onResume()
方法除了调用它们的超类之外是空的。上面 gif 中显示的片段甚至没有覆盖 onResume()
或 onCreate()
方法。此外,在我的应用程序中的其他非选项卡式活动中,这种行为不会发生 - 它只发生在 TabbedActivity
.
如果需要更多信息,请告诉我,我很乐意提供。我只是不确定这个问题可能发生在哪里。
编辑:
当我注释掉 ANOTHER FRAGMENT 的 onResume()
方法的内容时,我意识到这种情况不再发生。该方法如下所示:
@Override
public void onResume() {
super.onResume();
System.out.println("RESUME");
if (mShowCamera != null)
{
mShowCamera.camera = null;
}
mCamera = Camera.open();
mShowCamera = new ShowCamera(getContext(), mCamera);
mMainCamLayout = (FrameLayout)getView().findViewById(R.id.camLayout);
mMainCamLayout.addView(mShowCamera);
Camera.Parameters cameraParameters = mCamera.getParameters();
cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
if (cameraParameters.getSupportedFocusModes() != null &&
cameraParameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
{
mCamera.setParameters(cameraParameters);
}
}
已解决。问题是当我的应用程序重新成为焦点时,有很多工作要做。这导致加载 activity 所需的时间增加。
这个 activity 附有一些片段。造成此问题的一个因素是尝试缓存太多片段,如下所示:
ViewPager mViewPager = findViewById(R.id.view_pager);
mViewPager.setOffscreenPageLimit(4);
最大限度地减少 off-screen 页面的数量使我的 activity 的初始加载速度明显加快。
如果您的 activity 加载时间很长,请尝试减少它在 OnCreate 和 OnResume 方法中必须完成的工作量。