我的项目是一个在任何时候都可以弹出的待机界面,界面是一张图和一个倒计时提示。
我的界面是通过在activty中通过WindowManager.addview上去的。因为addview的window可以控制view显示在最上层,而单纯的activity界面不可以,会被遮挡。
因为activity真正visible的时候,是会回调onWindowFocusChanged这个方法,所以为了避免每个平台启动activity的速度问题,把启动倒计时放在onWindowFocusChanged这个方法里。大部分时候是没问题的。
但是在测试过程中,遇到一个棘手的问题。当前台是一个PopupWindow或者是一个WindowManager add的一个View时候,activity的onWindowFocusChange不会被回调,也就是这个activity获取不到焦点。因为activity的层级在前台的window下面。经过研究,view可以通过设置以下监听
addOnAttachStateChangeListener
(
new
OnAttachStateChangeListener
()
{
@Override
public
void
onViewDetachedFromWindow
(
View
v
)
{
}
@Override
public
void
onViewAttachedToWindow
(
View
v
)
{
}
}
onViewAttachedToWindow(View v) 表示view被attach到window上了。所以可以在onViewAttachedToWindow(View v)的方法中进行倒计时的吊起。这样就解决了我的问题