//bug
[email protected] log]$ cat shop_android_txws1_天下无双_总店_2014-12-18_19-05-53.log
TIME=1418354436000
FINGERPRINT=Xiaomi/mocha/mocha:4.4.4/KTU84P/4.12.12:user/release-keys
HARDWARE=mocha
UNKNOWN=unknown
RADIO=unknown
BOARD=unknown
versionCode=7
PRODUCT=mocha
versionName=2.1.6
DISPLAY=KTU84P
USER=builder
HOST=zc-miui-ota-bd32
DEVICE=mocha
TAGS=release-keys
MODEL=MI PAD
BOOTLOADER=unknown
CPU_ABI=armeabi-v7a
CPU_ABI2=armeabi
IS_DEBUGGABLE=true
ID=KTU84P
SERIAL=5EB1D83E
MANUFACTURER=Xiaomi
BRAND=Xiaomi
TYPE=user
android.view.WindowManager$BadTokenException: Unable to add window -- token android.[email protected] is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:587)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at com.sintn.hera.shop.activity.base.BaseActivity.showPromptDialog(BaseActivity.java:441)
at com.sintn.hera.shop.activity.base.BaseActivity.onEventRunEnd(BaseActivity.java:685)
at com.sintn.hera.shop.activity.member.SwipeActivity.onEventRunEnd(SwipeActivity.java:86)
at com.sintn.hera.shop.AndroidEventManager.doNotify(AndroidEventManager.java:159)
at com.sintn.hera.shop.AndroidEventManager.notifyEventRunEnd(AndroidEventManager.java:341)
at com.sintn.hera.shop.AndroidEventManager.onEventRunEnd(AndroidEventManager.java:321)
at com.sintn.hera.shop.AndroidEventManager$2$1.run(AndroidEventManager.java:262)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5026)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:802)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
//原因:
错误原因是Dialog在show的时候必须要有一个activity作为窗口载体,上面的日志的意思是承载Dialog的activity已经被销毁了,不存在了
解决方法:
1.粗暴一点直接try catch
2.有好一点就是show之前判断activity是否被销毁了
if (!isFinishing()) showDialog();