Android 等待 UI 线程

Posted

技术标签:

【中文标题】Android 等待 UI 线程【英文标题】:Android waiting for UI Thread 【发布时间】:2012-09-26 09:48:02 【问题描述】:

出于测试目的,我需要获取屏幕上所有可见视图的坐标。但是,在检查输出时,似乎 UI 线程尚未完成对所有视图的绘制/定位/应用设置。有些视图是 0x0 像素,而它们应该是可见的(并且它们在模拟器和物理设备上)。一些底部对齐的按钮的位置类似于楼梯等。

问:如何等待 UI Thread 完成绘制(或者至少等待一秒钟,应该绰绰有余),所以所有可见视图的坐标都是准确的?

我怀疑这与 Threads 有关,但我找不到任何明确的答案。到目前为止,我还没有任何自我声明的线程。

编辑:我使用 onBackPressed 使一堆视图可见,然后在 xml 中捕获它,使以前的视图不可见而其他视图可见,在 xml 中捕获它等等。我通过几种不同的视图组合进行迭代,并且“ xml-screenshot" 每个组合。

【问题讨论】:

也许向 UI 线程发布一个可运行文件也可以在这里工作:***.com/a/9425410/995891 【参考方案1】:
LinearLayout layout = (LinearLayout)findViewById(R.id.YOUD VIEW ID);
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener()  
    @Override 
    public void onGlobalLayout()  
        this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        int width  = layout.getMeasuredWidth();
        int height = layout.getMeasuredHeight(); 

     
);

您需要调整它以使用您的布局,并向基本父布局添加一个 ID。

通过使用ViewTreeObserver,您可以了解布局何时完成绘制,然后运行所需的代码

【讨论】:

以上是关于Android 等待 UI 线程的主要内容,如果未能解决你的问题,请参考以下文章

等待 UI 线程在 Android 中完成操作

Android 线程交互

等待传感器数据android - 我们总是需要一个新线程吗?

Android ANR 分析

Android系统消息处理机制

Android系统消息处理机制