日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android生命周期_Android开发 View的生命周期结合代码详解

發布時間:2023/12/20 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android生命周期_Android开发 View的生命周期结合代码详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咱們以TextView控件為例:

/**

* Created by SunshineBoy on 2020/9/23.

*/

public class TestTextView extends android.support.v7.widget.AppCompatTextView {

public TestTextView(Context context) {

super(context);

Log.e("TestTextView","TestTextView(Context context)");

}

public TestTextView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

Log.e("TestTextView","TestTextView(Context context, @Nullable AttributeSet attrs)");

}

public TestTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

protected void onVisibilityChanged(View changedView, int visibility) {

super.onVisibilityChanged(changedView, visibility);

Log.e("TestTextView","onVisibilityChanged");

}

@Override

protected void onFinishInflate() {

super.onFinishInflate();

Log.e("TestTextView","onFinishInflate");

}

@Override

protected void onAttachedToWindow() {

super.onAttachedToWindow();

Log.e("TestTextView","onAttachedToWindow");

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

Log.e("TestTextView","onMeasure");

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

Log.e("TestTextView","onSizeChanged");

}

@Override

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

super.onLayout(changed, left, top, right, bottom);

Log.e("TestTextView","onLayout");

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

Log.e("TestTextView","onDraw");

}

@Override

protected void onWindowVisibilityChanged(int visibility) {

super.onWindowVisibilityChanged(visibility);

Log.e("TestTextView","onWindowVisibilityChanged="+visibility);

}

@Override

protected void onDetachedFromWindow() {

super.onDetachedFromWindow();

Log.e("TestTextView","onDetachedFromWindow");

}

}

先看看默認狀態下生命周期:

2020-09-23 17:34:40.882 15132-15132/com.freddy.chat E/TestTextView: TestTextView(Context context, @Nullable AttributeSet attrs)

2020-09-23 17:34:40.882 15132-15132/com.freddy.chat E/TestTextView: onFinishInflate

2020-09-23 17:34:40.927 15132-15132/com.freddy.chat E/TestTextView: onAttachedToWindow

2020-09-23 17:34:40.927 15132-15132/com.freddy.chat E/TestTextView: onWindowVisibilityChanged=0

2020-09-23 17:34:40.927 15132-15132/com.freddy.chat E/TestTextView: onVisibilityChanged

2020-09-23 17:34:40.928 15132-15132/com.freddy.chat E/TestTextView: onMeasure

2020-09-23 17:34:41.056 15132-15132/com.freddy.chat E/TestTextView: onMeasure

2020-09-23 17:34:41.056 15132-15132/com.freddy.chat E/TestTextView: onSizeChanged

2020-09-23 17:34:41.056 15132-15132/com.freddy.chat E/TestTextView: onLayout

2020-09-23 17:34:41.065 15132-15132/com.freddy.chat E/TestTextView: onDraw

接下來看看setVisibility(View.INVISIBLE)狀態:

2020-09-23 17:37:14.191 15132-15132/com.freddy.chat E/TestTextView: onVisibilityChanged

再看看setVisibility(View.VISIBLE)狀態:

2020-09-23 17:38:07.338 15132-15132/com.freddy.chat E/TestTextView: onVisibilityChanged

2020-09-23 17:38:07.535 15132-15132/com.freddy.chat E/TestTextView: onDraw

再看看離開Activity掛起狀態:

2020-09-23 17:39:33.128 15132-15132/com.freddy.chat E/TestTextView: onWindowVisibilityChanged=8

2020-09-23 17:39:33.267 15132-15132/com.freddy.chat E/TestTextView: onVisibilityChanged

然后Activity掛起恢復:

2020-09-23 17:40:32.178 15132-15132/com.freddy.chat E/TestTextView: onWindowVisibilityChanged=4

2020-09-23 17:40:32.361 15132-15132/com.freddy.chat E/TestTextView: onVisibilityChanged

2020-09-23 17:40:32.414 15132-15132/com.freddy.chat E/TestTextView: onWindowVisibilityChanged=0

2020-09-23 17:40:32.551 15132-15132/com.freddy.chat E/TestTextView: onDraw

最后再看看Activity銷毀狀態:

2020-09-23 17:41:31.610 15132-15132/com.freddy.chat E/TestTextView: onWindowVisibilityChanged=8

2020-09-23 17:41:31.837 15132-15132/com.freddy.chat E/TestTextView: onDetachedFromWindow

由上可知View的生命周期是:

  • 首先創建帶兩個參數的構造函數;
  • 然后從xml文件中inflate完成后調onFinishInflate方法;
  • 然后在Activity執行onResume之后依附Activity窗口調onAttachedToWindow方法;
  • 然后調窗口狀態發生改變調onWindowVisibilityChanged方法;
  • 然后調view的狀態發生改變調onVisibilityChanged方法;
  • 然后開始測量view尺寸調onMeasure方法;
  • 然后測量結果與上次測量結果不一致時調onSizeChanged方法;
  • 然后為子view分配位置調onLayout方法;
  • 然后view渲染繪制內容細節調onDraw方法;
  • 最后Activity銷毀時調onDetachedFromWindow方法。
  • 記得關注我?更多原創干貨分享隨時更新,有問題評論留言討論

    源碼請去博客預覽網址鏈接如下

    Android開發 View的生命周期結合代碼詳解?blog.csdn.net

    總結

    以上是生活随笔為你收集整理的android生命周期_Android开发 View的生命周期结合代码详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。