App业务需求需要在打开一个新的页面后弹出一个浮层窗口覆盖当前显示的Acivity的UI,浮层窗口使用PopupWindow实现。运行发现打开该Activity出现错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{*.activities.WebRTCActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
查看文档得知PopupWindow在Activity没有渲染完成时候创建会报此错误,而我代码里面也确实是将PopupWindow的创建代码放在onCreate里的。
验证下,使用handler.sendEmptyMessageDelayed(SHOW_POPWINDOW, 1000)在onCreate方法中延迟一秒再创建PopupWindow,运行成功。
当然真用延迟创建这种方法是不靠谱的哈,因为不知道当前Activity的确切渲染时间。理论上Activity渲染完成应该会有回调方法,去查。嘿嘿~果然有onWindowFocusChanged,所以逻辑放在这里
@Override
public voidonWindowFocusChanged(booleanhasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus && isNeedShowConectDialog) {
showConnetDialogLogical(webRTCConig);
}
}
binggo!
网友评论