View和Activity的生命週期

pdog發表於2017-12-14

View和Activity的生命週期

  • 如果根佈局為RelativeLayout,那麼onMeasume() 共會執行4次
  • 如果根佈局為LinearLayout
    • 如果控制元件有weight 屬性,那麼onMeasume() 共會執行4次
    • 如果控制元件有weight屬性,但是根佈局中只有唯一一個子控制元件,那麼onMeasume() 共會執行2次

根區域性為RelativeLayout

  1. 開啟Activity
E/log: Activity生命週期:onCreate
E/view的生命週期: onCreate
E/view的生命週期: onFinishInflate
E/log: Activity生命週期:onStart
E/log: Activity生命週期:onResume
E/view的生命週期: onAttachedToWindow
E/view的生命週期: onMeasure
E/view的生命週期: onMeasure
E/view的生命週期: onSizeChanged
E/view的生命週期: onLayout
E/view的生命週期: onWindowFocusChanged true
E/view的生命週期: onMeasure
E/view的生命週期: onMeasure
E/view的生命週期: onLayout
E/view的生命週期: onDraw
複製程式碼
  1. 關閉Activity
E/view的生命週期: onWindowFocusChanged false
E/log: Activity生命週期:onPause
E/log: Activity生命週期:onStop
E/log: Activity生命週期:onDestroy
複製程式碼
  • 開啟另外的Activity

    1. 開啟一個的Activity,使原本的Activity進入onStop
    E/log: Activity生命週期:onPause
    E/view的生命週期: onWindowFocusChanged false
    E/log: Activity生命週期:onStop
    複製程式碼
    1. 退出這個Activity,使原本的Activity重新進入到前臺
    E/log: Activity生命週期:onRestart
    E/log: Activity生命週期:onStart
    E/log: Activity生命週期:onResume
    E/view的生命週期: onWindowFocusChanged true
    E/view的生命週期: onDraw
    複製程式碼
  • 開啟一個透明的Activity

    1. 開啟一個透明的Activity,使原本的Activity進入onPause

      E/log: Activity生命週期:onPause
      E/view的生命週期: onWindowFocusChanged false
      複製程式碼
    2. 關閉透明的Activity,使原本的Activity,進入onResume

      E/log: Activity生命週期:onResume
      E/view的生命週期: onWindowFocusChanged true
      複製程式碼

根區域性為LinearLayout

  • 子控制元件不含有weight屬性

  • 這個控制元件含有weight屬性但是它是根佈局的唯一子控制元件

    E/log: Activity生命週期:onCreate
    E/view的生命週期: onCreate
    E/view的生命週期: onFinishInflate
    E/log: Activity生命週期:onStart
    E/log: Activity生命週期:onResume
    E/view的生命週期: onAttachedToWindow
    E/view的生命週期: onMeasure
    E/view的生命週期: onSizeChanged
    E/view的生命週期: onLayout
    E/view的生命週期: onMeasure
    E/view的生命週期: onLayout
    E/view的生命週期: onDraw
    E/view的生命週期: onWindowFocusChanged true
    複製程式碼
  • 控制元件含有weight屬性,並且它不是其根區域性中的唯一子控制元件

    E/log: Activity生命週期:onCreate
    E/view的生命週期: onCreate
    E/view的生命週期: onFinishInflate
    E/log: Activity生命週期:onStart
    E/log: Activity生命週期:onResume
    E/view的生命週期: onAttachedToWindow
    E/view的生命週期: onMeasure
    E/view的生命週期: onSizeChanged
    E/view的生命週期: onLayout
    E/view的生命週期: onMeasure
    E/view的生命週期: onLayout
    E/view的生命週期: onDraw
    E/view的生命週期: onWindowFocusChanged true
    複製程式碼

如果view沒有任何沒有內容,並且根佈局內有其他內容,則最後的onDraw不會執行

<!--自定義view有weight, view中無內容顯示,並且根佈局中有其他控制元件,onDraw方法沒有被執行-->
E/log: Activity生命週期:onCreate
E/view的生命週期: onCreate
E/view的生命週期: onFinishInflate
E/log: Activity生命週期:onStart
E/log: Activity生命週期:onResume
E/view的生命週期: onAttachedToWindow
E/view的生命週期: onMeasure
E/view的生命週期: onMeasure
E/view的生命週期: onSizeChanged
E/view的生命週期: onLayout
E/view的生命週期: onWindowFocusChanged true
E/view的生命週期: onMeasure
E/view的生命週期: onMeasure
E/view的生命週期: onLayout
複製程式碼
<!--自定義view無weight,viwe有內容顯示,onDraw方法被執行了-->
E/log: Activity生命週期:onCreate
E/view的生命週期: onCreate
E/view的生命週期: onFinishInflate
E/log: Activity生命週期:onStart
E/log: Activity生命週期:onResume
E/view的生命週期: onAttachedToWindow
E/view的生命週期: onMeasure
E/view的生命週期: onSizeChanged
E/view的生命週期: onLayout
E/view的生命週期: onWindowFocusChanged true
E/view的生命週期: onMeasure
E/view的生命週期: onLayout
E/view的生命週期: onDraw
複製程式碼

相關文章