Android横屏状态下返回到壁纸界面屏幕刷新问题
前两款android智能机开发过程中曾经遇到过在launcher主屏界面上建一个应用快捷图标,在横屏的状态下点击打开此应用,然后按返回键,很大概率上屏幕会刷新失败,显示半屏黑屏,是由于关闭当前activity时是横屏状态,关闭后返回到壁纸界面是竖屏,windowManagerService刷新处理问题。现将解决方案贴出来,望以后遇到此问题的同学借鉴:
?
??????????? boolean gone = win.mViewVisibility == View.GONE
??????????????????? || !win.mRelayoutCalled
??????????????????? || win.mRootToken.hidden
??????????????????? || (atoken != null && atoken.hiddenRequested)
??????????????????? || win.mAttachedHidden
??????????????????? || win.mExiting || win.mDestroying;
??????????? if (!win.mLayoutAttached) {
??????????????? if (DEBUG_LAYOUT) Slog.v(TAG, "First pass " + win
??????????????????????? + ": gone=" + gone + " mHaveFrame=" + win.mHaveFrame
??????????????????????? + " mLayoutAttached=" + win.mLayoutAttached);
??????????????? if (DEBUG_LAYOUT && gone) Slog.v(TAG, "? (mViewVisibility="
??????????????????????? + win.mViewVisibility + " mRelayoutCalled="
??????????????????????? + win.mRelayoutCalled + " hidden="
??????????????????????? + win.mRootToken.hidden + " hiddenRequested="
??????????????????????? + (atoken != null && atoken.hiddenRequested)
??????????????????????? + " mAttachedHidden=" + win.mAttachedHidden);
??????????? }
??????????? if (win.mIsWallpaper)
??????????? {
??????????????? gone = win.mViewVisibility == View.GONE
??????????????? ??? ??? || !win.mRelayoutCalled
??????????????? ??? ??? || (atoken != null && atoken.hiddenRequested)
??????????????? ??? ??? || win.mAttachedHidden
??????????????? ??? ??? || win.mExiting || win.mDestroying;
??????????? }
???????????
??????????? // If this view is GONE, then skip it -- keep the current
??????????? // frame, and let the caller know so they can ignore it
??????????? // if they want.? (We do the normal layout for INVISIBLE
??????????? // windows, since that means "perform layout as normal,
??????????? // just don't display").
??????????? if (!gone || !win.mHaveFrame) {
??????????????? if (!win.mLayoutAttached) {
??????????????????? mPolicy.layoutWindowLw(win, win.mAttrs, null);
??????????????????? win.mLayoutSeq = seq;
??????????????????? if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame="
??????????????????????????? + win.mFrame + " mContainingFrame="
??????????????????????????? + win.mContainingFrame + " mDisplayFrame="
??????????????????????????? + win.mDisplayFrame);
??????????????? } else {
??????????????????? if (topAttached < 0) topAttached = i;
??????????????? }
??????????? }