AndroidU activity实战篇(2/2)

一 疑难问题打开protolog

image.png
  1. configuration变化导致界面闪烁
    问题背景:str待机开机后,初次按键后整个页面发生刷机,查看eventlog发现activity声明周期重新走了一遍
    解决方案:
    <activity android:name=".MyActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />
  2. 应用通过exit(0)退出导致黑屏问题
  3. activity没有执行oncreate导致inr(input dispatcher timeout)
  4. activity不响应声明周期调度
  5. 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前会判断:
不执行onstop

app的animating从true变成false导致问题发生
final boolean animating = s.isAnimating(TRANSITION | PARENTS,
ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS)

image.png

animating为什么会变,待续。。。

  1. 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.apk
    dataDir=/data/user/0/com.android.vending
    splitDir=[/data/app/
    FI9iq-rmV2cvbNrKxedGuQ==/com.android.vending-0jUqys6LiwUidQrL-oiDFw==/split_config.armeabi_v7a.apk, /data/app/FI9iq-rmV2cvbNrKxedGuQ==/com.android.vending-0jUqys6LiwUidQrL-oiDFw==/split_config.en.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/
    GWMOd3ecTLtbP3Jy5G3Qcw==/com.google.android.apps.tv.launcherx-KdsBSIJ60gl6vkczNkgHxQ==/base.apk
    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

  1. 上一个应用finish自己,然后launcher的resume没有被调用
    结论主线程卡顿导致。
    2.洪恩识字拒绝权限出现黑屏
    根因:应用执行kill自己进程逻辑,系统判断逻辑异常,不会继续切换Activity.
  2. 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);
            }
  1. 前台activity进程死亡也会进行task的切换。

但是三方应用在生命周期内调用完finish后kill了自己导致异常产生。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容