一 疑难问题打开protolog
- configuration变化导致界面闪烁
问题背景:str待机开机后,初次按键后整个页面发生刷机,查看eventlog发现activity声明周期重新走了一遍
解决方案:
<activity android:name=".MyActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" /> - 应用通过exit(0)退出导致黑屏问题
- activity没有执行oncreate导致inr(input dispatcher timeout)
- activity不响应声明周期调度
- activity生命周期走到onstop,导致数据被清理。
问题描述:
从tvapp点击settings跳转到setting界面后,liveTV不应该执行onstop,但是异常情况下,onstop被调用。
问题分析:
正常情况下,也会将liveTV添加到stopping列表,但是下一个activity idle时并不会执行liveTV的stop方法。异常时执行了stop
10-28 19:40:46.030 819 5306 I wm_add_to_stopping: [0,206791775,com..tv/com..player.TVActivity,makeInvisible]
执行onstop前会判断:
app的animating从true变成false导致问题发生
final boolean animating = s.isAnimating(TRANSITION | PARENTS,
ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS)
animating为什么会变,待续。。。
- home不可见
WINDOW MANAGER TOKENS (dumpsys window tokens)
All tokens:
Display #0
WindowToken{163e android.os.Binder@7b956f9}:
windows=[Window{fc4e901 u0 InputMethod}]
windowType=2011 hasVisible=true
WallpaperWindowToken{bcdcd9 token=android.os.Binder@c86fb20}:
windows=[Window{9def902 u0 com.android.systemui.ImageWallpaper}]
windowType=2013 hasVisible=false
WindowToken{70c3f8c android.os.BinderProxy@3f21a94}:
windows=[]
windowType=2038 hasVisible=false
WindowToken{9648629 android.os.BinderProxy@f7af61c}:
windows=[]
windowType=2038 hasVisible=true
ActivityRecord{e872799 u0 com.android.vending/com.google.android.finsky.tvmainactivity.TvMainActivity t9}:
packageName=com.android.vending processName=com.android.vending
launchedFromUid=1000 launchedFromPackage=com.tcl.suspension launchedFromFeature=null userId=0
app=ProcessRecord{10223b5 11967:com.android.vending/u0a55}
Intent { act=android.intent.action.VIEW dat=https://play.google.com/store/apps/details?id=com.tcl.healthhub flg=0x10408000 pkg=com.android.vending cmp=com.android.vending/com.google.android.finsky.tvmainactivity.TvMainActivity (has extras) }
rootOfTask=true task=Task{9a0fea0 #9 visible=true type=standard mode=fullscreen translucent=false A=10055:com.android.vending U=0 StackId=9 sz=1}
taskAffinity=10055:com.android.vending
mActivityComponent=com.android.vending/com.google.android.finsky.tvmainactivity.TvMainActivity
baseDir=/data/app/FI9iq-rmV2cvbNrKxedGuQ==/com.android.vending-0jUqys6LiwUidQrL-oiDFw==/base.apkFI9iq-rmV2cvbNrKxedGuQ==/com.android.vending-0jUqys6LiwUidQrL-oiDFw==/split_config.armeabi_v7a.apk, /data/app/
dataDir=/data/user/0/com.android.vending
splitDir=[/data/app/FI9iq-rmV2cvbNrKxedGuQ==/com.android.vending-0jUqys6LiwUidQrL-oiDFw==/split_config.en.apk]GWMOd3ecTLtbP3Jy5G3Qcw==/com.google.android.apps.tv.launcherx-KdsBSIJ60gl6vkczNkgHxQ==/base.apk
stateNotNeeded=false componentSpecified=false mActivityType=standard
compat={213dpi always-compat} labelRes=0x7f1405c1 icon=0x7f110001 theme=0x7f15023a
mLastReportedConfigurations:
mGlobalConfig={1.0 ?mcc?mnc [en_US] ldltr sw540dp w961dp h540dp 213dpi lrg long land television -touch -keyb/v/h dpad/v winConfig={ mBounds=Rect(0, 0 - 1280, 720) mAppBounds=Rect(0, 0 - 1280, 720) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} s.4}
mOverrideConfig={1.0 ?mcc?mnc [en_US] ldltr sw540dp w961dp h540dp 213dpi lrg long land television -touch -keyb/v/h dpad/v winConfig={ mBounds=Rect(0, 0 - 1280, 720) mAppBounds=Rect(0, 0 - 1280, 720) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} s.2}
CurrentConfiguration={1.0 ?mcc?mnc [en_US] ldltr sw540dp w961dp h540dp 213dpi lrg long land television -touch -keyb/v/h dpad/v winConfig={ mBounds=Rect(0, 0 - 1280, 720) mAppBounds=Rect(0, 0 - 1280, 720) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} s.2}
taskDescription: label="null" icon=null iconResource=/0 iconFilename=null primaryColor=ff33867b
backgroundColor=ff303030 statusBarColor=ff000000 navigationBarColor=ff000000
launchFailed=false launchCount=0 lastLaunchTime=-2m15s11ms
mHaveState=true mIcicle=Bundle[mParcelledData.dataSize=8000]
state=STARTED stopped=true delayedResume=false finishing=false
keysPaused=false inHistory=true setToSleep=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED
occludesParent=true noDisplay=false immersive=false launchMode=2
frozenBeforeDestroy=false forceNewConfig=false
mActivityType=standard
windows=[Window{e11a321 u0 com.android.vending/com.google.android.finsky.tvmainactivity.TvMainActivity}]
windowType=2 hasVisible=true waitingToShow=true
mOccludesParent=true mOrientation=-1
mVisibleRequested=true mVisible=true mClientVisible=true reportedDrawn=true reportedVisible=true
mNumInterestingWindows=1 mNumDrawnWindows=1 allDrawn=true lastAllDrawn=true)
startingData=null firstWindowDrawn=true mIsExiting=false
nowVisible=true lastVisibleTime=-57s645ms
resizeMode=RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION
mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false
ActivityRecord{575793c u0 com.google.android.apps.tv.launcherx/.home.HomeActivity t8}:
packageName=com.google.android.apps.tv.launcherx processName=com.google.android.apps.tv.launcherx
launchedFromUid=10048 launchedFromPackage=com.google.android.tungsten.setupwraith launchedFromFeature=null userId=0
app=ProcessRecord{1683fbc 11096:com.google.android.apps.tv.launcherx/u0a52}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10800000 pkg=com.google.android.apps.tv.launcherx cmp=com.google.android.apps.tv.launcherx/.home.HomeActivity (has extras) }
rootOfTask=true task=Task{bf0e81a #8 visible=true type=home mode=fullscreen translucent=true I=com.google.android.apps.tv.launcherx/.home.HomeActivity U=0 StackId=1 sz=1}
taskAffinity=null
mActivityComponent=com.google.android.apps.tv.launcherx/.home.HomeActivity
baseDir=/data/app/
dataDir=/data/user/0/com.google.android.apps.tv.launcherx
splitDir=[/data/app/GWMOd3ecTLtbP3Jy5G3Qcw==/com.google.android.apps.tv.launcherx-KdsBSIJ60gl6vkczNkgHxQ==/split_config.armeabi_v7a.apk, /data/app/GWMOd3ecTLtbP3Jy5G3Qcw==/com.google.android.apps.tv.launcherx-KdsBSIJ60gl6vkczNkgHxQ==/split_config.en.apk, /data/app/~~GWMOd3ecTLtbP3Jy5G3Qcw==/com.google.android.apps.tv.launcherx-KdsBSIJ60gl6vkczNkgHxQ==/split_config.tvdpi.apk]
stateNotNeeded=true componentSpecified=false mActivityType=home
compat={213dpi always-compat} labelRes=0x7f1403a9 icon=0x7f100001 theme=0x7f150206
mLastReportedConfigurations:
mGlobalConfig={1.0 ?mcc?mnc [en_US] ldltr sw540dp w961dp h540dp 213dpi lrg long land television -touch -keyb/v/h dpad/v winConfig={ mBounds=Rect(0, 0 - 1280, 720) mAppBounds=Rect(0, 0 - 1280, 720) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} s.4}
mOverrideConfig={1.0 ?mcc?mnc [en_US] ldltr sw540dp w961dp h540dp 213dpi lrg long land television -touch -keyb/v/h dpad/v winConfig={ mBounds=Rect(0, 0 - 1280, 720) mAppBounds=Rect(0, 0 - 1280, 720) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} s.4}
CurrentConfiguration={1.0 ?mcc?mnc [en_US] ldltr sw540dp w961dp h540dp 213dpi lrg long land television -touch -keyb/v/h dpad/v winConfig={ mBounds=Rect(0, 0 - 1280, 720) mAppBounds=Rect(0, 0 - 1280, 720) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} s.18}
RequestedOverrideConfiguration={0.0 ?mcc?mnc ?localeList ?layoutDir ?swdp ?wdp ?hdp ?density ?lsize ?long ?ldr ?wideColorGamut ?orien ?uimode ?night ?touch ?keyb/?/? ?nav/? winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=null mWindowingMode=undefined mDisplayWindowingMode=undefined mActivityType=home mAlwaysOnTop=undefined mRotation=undefined}}
taskDescription: label="null" icon=null iconResource=/0 iconFilename=null primaryColor=ff37474f
backgroundColor=ff0e0e0f statusBarColor=ff263238 navigationBarColor=ff000000
launchFailed=false launchCount=0 lastLaunchTime=-9m9s921ms
mHaveState=false mIcicle=null
state=RESUMED stopped=false delayedResume=false finishing=false
keysPaused=false inHistory=true setToSleep=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED
occludesParent=false noDisplay=false immersive=false launchMode=2
frozenBeforeDestroy=false forceNewConfig=false
mActivityType=home
windows=[Window{608c6a6 u0 com.google.android.apps.tv.launcherx/com.google.android.apps.tv.launcherx.home.HomeActivity}]
windowType=2 hasVisible=true
mOccludesParent=false mOrientation=-1
mVisibleRequested=true mVisible=true mClientVisible=true reportedDrawn=true reportedVisible=true
mNumInterestingWindows=1 mNumDrawnWindows=1 allDrawn=true lastAllDrawn=true)
startingData=null firstWindowDrawn=true mIsExiting=false
nowVisible=true lastVisibleTime=-57s364ms
resizeMode=RESIZE_MODE_UNRESIZEABLE
mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false
WindowToken{ddbe6d5 android.os.BinderProxy@e31f63f}:
windows=[]
windowType=2038 hasVisible=false
- 上一个应用finish自己,然后launcher的resume没有被调用
结论主线程卡顿导致。
2.洪恩识字拒绝权限出现黑屏
根因:应用执行kill自己进程逻辑,系统判断逻辑异常,不会继续切换Activity. - finishIfPossible()方法会进行task的切换。
[ActivityRecord.java]
// We are finishing the top focused activity and its task has nothing to be focused so
// the next focusable task should be focused.
if (mayAdjustTop && ((ActivityStack) task).topRunningActivity(true /* focusableOnly */)
== null) {
task.adjustFocusToNextFocusableTask("finish-top", false /* allowFocusSelf */,
shouldAdjustGlobalFocus);
}
- 前台activity进程死亡也会进行task的切换。
但是三方应用在生命周期内调用完finish后kill了自己导致异常产生。