今天在測試模塊功能時,出現WindowLeaked的問題,Log如下:
I/WorkActivity(13831): in WorkActivity...I/WorkActivity(13831): in onCreate...from=0 isConfingChanged=falseI/WorkActivity(13831): initBroadcast...I/WorkActivity(13831): bundle is null!!I/WorkActivity(13831): onResume, isRmLogin=false from=0E/aa(13831): WorkActivity ipStr=192.123.40.149I/WorkActivity(13831): not first login, only initialize network configration!.......I/WorkActivity(13831): Identity init sucessI/WorkActivity(13831): ip:192.123.40.149 port:20060 webIp=192.123.40.149 webPort=8081 UserName=houzhanshengI/WorkActivity(13831): edVIp=android.widget.EditText{b28b2dc VFED..CL ......I. 0,0-0,0 #7f0a004f app:id/edVIp} remoteInfo=com.ims.data.RemoteChatInfo@d9db961I/View(13831): ssignParent(ViewParent parent) parent is: android.view.ViewRootImpl@31bea69dI/WorkActivity(13831): showing PRogressDlgI/View(13831): ssignParent(ViewParent parent) parent is: android.view.ViewRootImpl@3f5ef712I/View(13831): ssignParent(ViewParent parent) parent is: android.widget.ListView{21c36f36 VFED.VC. ......ID 0,0-1116,78 #7f0a0060 app:id/lstVideoRm}I/WorkActivity(13831): onPause... isConfingChanged=trueI/WorkActivity(13831): onDestroy... isConfingChanged=falseI/View(13831): ssignParent(ViewParent parent) parent is: nullI/View(13831): ssignParent(ViewParent parent) parent is: nullE/WindowManager(13831): android.view.WindowLeaked: Activity org.doubango.imsdroid.Screens.WorkActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{a172fa4 V.E..... R.....I. 0,0-1160,324} that was originally added hereE/WindowManager(13831): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:399)E/WindowManager(13831): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:300)E/WindowManager(13831): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)E/WindowManager(13831): at android.app.Dialog.show(Dialog.java:325)E/WindowManager(13831): at org.doubango.imsdroid.Screens.WorkActivity.showLoginDlg(WorkActivity.java:1028)E/WindowManager(13831): at org.doubango.imsdroid.Screens.WorkActivity.onResume(WorkActivity.java:630)E/WindowManager(13831): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1265)E/WindowManager(13831): at android.app.Activity.performResume(Activity.java:6189)E/WindowManager(13831): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3230)E/WindowManager(13831): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3272)E/WindowManager(13831): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2521)E/WindowManager(13831): at android.app.ActivityThread.access$1200(ActivityThread.java:163)E/WindowManager(13831): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1374)E/WindowManager(13831): at android.os.Handler.dispatchMessage(Handler.java:102)E/WindowManager(13831): at android.os.Looper.loop(Looper.java:135)E/WindowManager(13831): at android.app.ActivityThread.main(ActivityThread.java:5601)E/WindowManager(13831): at java.lang.reflect.Method.invoke(Native Method)E/WindowManager(13831): at java.lang.reflect.Method.invoke(Method.java:372)E/WindowManager(13831): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)E/WindowManager(13831): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)I/View(13831): ssignParent(ViewParent parent) parent is: nullI/WorkActivity(13831): in WorkActivity...I/WorkActivity(13831): in onCreate...from=0 isConfingChanged=falseI/WorkActivity(13831): initBroadcast...I/WorkActivity(13831): onResume, isRmLogin=true from=0E/aa(13831): WorkActivity ipStr=192.123.40.149I/WorkActivity(13831): not first login, only initialize network configration!分析log,Progressdlg顯示異常的原因是attach時,該activity銷毀重啟了,所以leak。問題是翻遍代碼,也沒有發現重啟該activity的地方,相當詭異。
于是baidu google之后,終于有網友的慷慨提示說是不是橫豎屏幕切換/軟件盤/sim卡等原因引起configChanges,從而引起Activity生命周期重走導致的?
于是我在log中搜索change發現如下可疑log:
I/WorkActivity(19320): in onCreate...from=3 isConfingChanged=falseI/InputReader(3062): Reconfiguring input devices. changes=0x00000004I/HwSystemManager(32006): HsmPackageManager:onConfigureChanged: zh_CNI/HwSystemManager(3625): HsmPackageManager:onConfigureChanged: zh_CNW/ws000(13240): application#onConfigurationChanged() is invoked!!!W/ws000(12723): Application#onConfigurationChanged() is invoked!!!I/HwLauncher(26780): Model onReceive intent=Intent { act=android.intent.action.CONFIGURATION_CHANGED flg=0x70000010 }I/PanelView(3267): Configuration orientation changedI/WorkActivity(19320): onDestroy... isConfingChanged=falseI/TimeManager(3267): receiver action = android.intent.action.CONFIGURATION_CHANGEDI/TimeManager(3267): notify time change. size = 2I/WorkActivity(19320): in onCreate...from=0 isConfingChanged=falseI/InputReader(3062): Reconfiguring input devices. changes=0x00000004I/HwSystemManager(3625): HsmPackageManager:onConfigureChanged: zh_CNI/HwSystemManager(32006): HsmPackageManager:onConfigureChanged: zh_CNI/HwLauncher(26780): Model onReceive intent=Intent { act=android.intent.action.CONFIGURATION_CHANGED flg=0x70000010 }W/ws000(13240): Application#onConfigurationChanged() is invoked!!!W/ws000(12723): Application#onConfigurationChanged() is invoked!!!I/WorkActivity(19320): onPause... isConfingChanged=trueI/WorkActivity(19320): onDestroy... isConfingChanged=falseI/PanelView(3267): Configuration orientation changedI/TimeManager(3267): receiver action = android.intent.action.CONFIGURATION_CHANGEDI/WorkActivity(19320): in onCreate...from=0 isConfingChanged=falseI/WindowBlurViewManager(3267): allowChangeBlurBackgroundI/TimeManager(3267): notify time change. size = 2I/TimeManager(3267): notify time change. size = 2I/WindowBlurViewManager(3267): allowChangeBlurBackgroundI/WorkActivity(19320): WorkActivity mSipBroadCastRecv got broadcast action=org.doubango.ngn.events.NgnRegistrationEventArgs.ACTION_REGISTRATION_CHANGEDI/WorkActivity(19320): WorkActivity mSipBroadCastRecv got broadcast action=org.doubango.ngn.events.NgnRegistrationEventArgs.ACTION_REGISTRATION_CHANGEDE/MY_TAG(3945): plugged changed1486628313398E/MY_TAG(3945): plugged changed1486628330300I/TimeManager(3267): notify time change. size = 2E/MY_TAG(3945): plugged changed1486628373394E/MY_TAG(3945): plugged changed1486628390461I/TimeManager(3267): notify time change. size = 2從如下關鍵log可以看出onConfigureChanged確實走了,由此可以確定確實是ConfigureChanged導致生命周期重走,而引起重走的原因是locale修改:I/HwSystemManager(3625): HsmPackageManager:onConfigureChanged: zh_CNW/ws000(13240): Application#onConfigurationChanged() is invoked!!!...I/HwLauncher(26780): Model onReceive intent=Intent { act=android.intent.action.CONFIGURATION_CHANGED flg=0x70000010 }I/PanelView(3267): Configuration orientation changed......而事實是中間沒有進行任何與語言時區修改有關的操作,又陷入了抓狂中……一頓糾結之后,終于發現,在該activity的onCreate中判斷某服務沒有啟動時,會跳轉到一個splash頁面啟動服務,而該splash頁面是豎屏的!在menifest中修改該splash頁面的orentation與后面的一致,ok問題解決。<activity android:name="com.screens.SplashActivity" android:screenOrientation="landscape" />當然也可以重寫Activity的onConfigurationChanged方法進行處理,這需要看具體情況。希望能給遇到類似問題的朋友一點靈感·~感謝網友的慷慨分享:http://blog.csdn.net/u013951778/article/details/52612083
新聞熱點
疑難解答