[Android Software/Hacking General [Developers Only]] llrraa2010:
public class WindowManagerService extends IWindowManager.Stub
implements Watchdog.Monitor {
......

int adjustWallpaperWindowsLocked() {
int changed = 0;

final int dw = mDisplay.getWidth();
final int dh = mDisplay.getHeight();

// First find top-most window that has asked to be on top of the
// wallpaper; all wallpapers go behind it.
final ArrayList<WindowState> localmWindows = mWindows;
int N = localmWindows.size();
WindowState w = null;
WindowState foundW = null;
int foundI = 0;
WindowState topCurW = null;
int topCurI = 0;
int i = N;
//Label #1:
while (i > 0) {
//从上到下遍历窗口堆栈，查找需要显示壁纸的窗口foundW，foundI为窗口foundW在窗口堆栈中
//的位置如果没有找到需要显示壁纸的窗口，并且系统中存在壁纸窗口，那么topCurW就指向Z轴
//位置最大的壁纸窗口，topCurI为窗口topCurW在窗口堆栈中的位置，这时候foundW一定等于
//null。
......
}

//Label #2:
if (mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) {
//如果系统当前正在窗口切换的过程中，并且系统当前存在一个需要显示壁纸的Activity窗口，
//那么就认为当前正在执行的窗口切换涉及到了这个需要显示壁纸的Activity窗口，
//因此，就暂时不要调整壁纸窗口的位置了，等到窗口切换过程完成了再说。
//系统当前存在一个需要显示壁纸的Activity窗口，意味着mWallpaperTarget不等于null，
//或者foundW不等于null。
......
}

if (mWallpaperTarget != foundW) {
//上一次显示壁纸的窗口和接下来要显示壁纸的窗口发生了变化

mLowerWallpaperTarget = null;
mUpperWallpaperTarget = null;

WindowState oldW = mWallpaperTarget;
mWallpaperTarget = foundW;

// Now what is happening... if the current and new targets are
// animating, then we are in our super special mode!
if (foundW != null && oldW != null) {
boolean oldAnim = oldW.mAnimation != null
|| (oldW.mAppToken != null && oldW.mAppToken.animation != null);
boolean foundAnim = foundW.mAnimation != null
|| (foundW.mAppToken != null && foundW.mAppToken.animation != null);
......

//Label #3:
if (foundAnim && oldAnim) {
//上一次显示壁纸的窗口oldW和接下来要显示壁纸的窗口foundW正在显示动画的
//过程中，那么就将Z轴位置较高的窗口保存在mUpperWallpaperTarget中，而将
//Z轴位置较低的窗口保存在mLowerWallpaperTarget中，并且将变量foundW指向
//Z轴位置较高的窗口，这样就可以在这两个窗口的动画显示过程中都能看到壁
//纸窗口.
......
}
}
｝else if (mLowerWallpaperTarget != null) {
//Label #4:
//检查mUpperWallpaperTarget和mLowerWallpaperTarget所指向的窗口的动画显示过程
//是否已经结束，如果已经结束，那么就将mUpperWallpaperTarget和
//mLowerWallpaperTarget的值置null。
// Is it time to stop animating?
......
}

boolean visible = foundW != null;
//Label #5:
if (visible) {
//前面找到了一个需要显示壁纸的窗口foundW，并且存在其它窗口与它关联，这些关联的
//窗口包括：
//1. 在与该窗口所对应的窗口令牌的其它窗口
//2. 该窗口所设置的启动窗口
//3. 附加在该窗口的其它窗口
//在上述这些关联的窗口中，如果存在一些Z轴位置比窗口foundW小，那么就将需要将壁纸
//窗口放在Z轴位置最小的那个窗口下面，即将变量foundW指向Z轴位置最小的那个窗口。
......
}

//让变量foundW指向前面找到的需要显示壁纸的窗口的下一个窗口，
//这时候变量foundI记录的仍是需要显示壁纸的窗口在窗口堆栈中的位置，
//接下来会根据这两个变量来调整壁纸窗口在窗口堆栈中的位置
if (foundW == null && topCurW != null) {
//前面提到，如果没有找到需要显示壁纸的窗口，并且系统中存在壁纸窗口，那么foundW一
//定等于null，并且topCurW一定不等于null，这时候就不需要调整壁纸窗口在窗口堆栈中的
//位置。为了与其它情况统一处理，这时候假设位于壁纸窗口上面的那个窗口就是需要显示
//壁纸的窗口。因此，就会将foundI的值设置为(topCurI+1)，而将foundW的值设置为
//topCurW。
// There is no wallpaper target, so it goes at the bottom.
// We will assume it is the same place as last time, if known.
foundW = topCurW;
foundI = topCurI+1;
} else {
//前面找到了需要显示壁纸的窗口，因此，就将它的下一个窗口保存在foundW中，变量foundI
//的值不需要修改。
// Okay i is the position immediately above the wallpaper. Look at
// what is below it for later.
foundW = foundI > 0 ? localmWindows.get(foundI-1) : null;
}

//如果前面找到的需要显示壁纸的窗口是可见的，并且当前正在显示壁纸的窗口设置了壁纸窗口
//在X轴和Y轴上的偏移位置，那么就将用来描述壁纸窗口在X轴和Y轴上的偏移位置的WallpaperX、
//WallpaperY、WallpaperXStep和WallpaperYStep值记录在mLastWallpaperX、
//mLastWallpaperXStep、mLastWallpaperY和mLastWallpaperYStep中。
if (visible) {
if (mWallpaperTarget.mWallpaperX >= 0) {
mLastWallpaperX = mWallpaperTarget.mWallpaperX;
mLastWallpaperXStep = mWallpaperTarget.mWallpaperXStep;
}
if (mWallpaperTarget.mWallpaperY >= 0) {
mLastWallpaperY = mWallpaperTarget.mWallpaperY;
mLastWallpaperYStep = mWallpaperTarget.mWallpaperYStep;
}
}

//Label #6:
// Start stepping backwards from here, ensuring that our wallpaper windows
// are correctly placed.
int curTokenIndex = mWallpaperTokens.size();
while (curTokenIndex > 0) {
//一切准备就绪，开始调整系统中的壁纸窗口在窗口堆栈的位置，算法如下所示。
//对于从Z轴位置从高到低的每一个壁纸窗口wallpaper：
//1. 如果它与变量foundW指向的不是同一个壁纸窗口，那么就说明它在窗口堆栈中
//的位置不对，这时候就需要将它调整到窗口堆栈中的第foundI个位置上。
//2. 如果它与变量foundW指向的是同一个壁纸窗口，那么就说明它在窗口堆栈中的
//位置是正确，这时候就不需要对它进行调整，不过要让变量foundI的值减1，并且将
//在窗口堆栈第(foundI - 1)个位置的窗口记录在变量foundW中。
//注意，变量foundW一开始就指向Z轴位置最高的壁纸窗口，而变量foundI记录的是
//位于Z轴位置最高的壁纸窗口上面的那个窗口在窗口堆栈中的位置。
//上述算法实际上是用状态机的方法将系统中的所有壁纸窗口（假设数量为N）按照Z轴
//位置从高到底的顺序放置在窗口堆栈中的第（foundI - 1）、（foundI - 2）、
//（foundI - 3）、......、（foundI - N）个位置上。
......
}

return changed;
}

......
}