Android 何时在 Activity.onCreate() 中的 setContentView() 之后首次调用 View.onMeasure()?

Posted

技术标签:

【中文标题】Android 何时在 Activity.onCreate() 中的 setContentView() 之后首次调用 View.onMeasure()?【英文标题】:When does Android make first call to View.onMeasure() after setContentView() in Activity.onCreate()? 【发布时间】:2018-01-31 01:17:37 【问题描述】:

假设一个 android Activity 为包含一个或多个 View 的 XML 定义的布局调用 setCurrentView() 以以通常的方式绑定它:

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // ... other stuff
    MyCustomViewClass mcv = (MyCustomViewClass)findViewById(R.id.mcv);
    mcv.setSomeValues(x,y,z);
    // ... more stuff
    // ... ok, finished with everything in onCreate()

在 Android 首次调用 R.layout.activity_main 中声明的任何子 View 的 onMeasure() 方法之前,对该 Activity 的 onCreate() 方法的调用是否保证完成执行并返回?或者 Android 是否有权在调用 setContentView() 期间或之后的任何时间开始调用 onMeasure()?

【问题讨论】:

【参考方案1】:

在 onCreate 结束时,Activity 甚至还没有出现在屏幕上(直到调用 onStart 才会出现)。所以在那之前它不会尝试布局任何东西,因为它不在屏幕上,因此不需要布局。

【讨论】:

以上是关于Android 何时在 Activity.onCreate() 中的 setContentView() 之后首次调用 View.onMeasure()?的主要内容,如果未能解决你的问题,请参考以下文章

Android 数据存储,何时使用 Sqlite,何时使用 JSON,Linq 替代方案

Android:如何检测滚动何时结束

android Service oncreate 在UI线程 何时用service,何时用thread

如何确定 HTML 元素何时在 Android WebView 中获得焦点?

何时在运行时请求 Android Marshmallow 6.0 的权限?

Android Webview:检测渲染何时完成