本文介绍了实例非UI线程视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道的UI元素(查看层次)只能从UI线程进行操作。为后台操作,所述的AsyncTask可以使用,它提供了事件处理程序到达UI线程

要简短,它是允许在非UI线程创建一个视图(绑 getApplicationContext())?该自定义视图的后代 - 一旦实例化 - 从 UI线程添加到视图层次。因此,只有在构造函数调用中完成的 Asynctask.doInBackground();它的连接( addView(...))到活动的根布局层次仍然在UI线程中完成的。

在细节:

 公共MyView的扩展视图{
     公共MyView的(上下文的背景下){
            ...
     }
...
}


  1. 我做了一个自定义的视图,与被覆盖的的onDraw(...)等。


  2. 当用户在我的主要活动点击某个菜单项,另一个活动(MyOtherActivity)被创建和显示的这屏幕是完全MyView的


  3. 由于MyOtherActivity的屏幕必须立即显示出来,我美元一个的AsyncTask而用户是其他地方的主要活动p $ P-MyView的实例化(即他没有点击的菜单项还)。该MyView的引用存储在静态数据成员


  4. MyOtherActivity.onCreate()被调用时,它的构造code MyView的需要从静态,并通过 addView(...)。


  5. (我知道,静态变量可能会引入内存泄漏,所以我将它设置为一旦它的没有必要的。)


这难道不是一个问题(可能是导致异常的问题)的MyView的是在不同的线程实例化(并采取的返回值getApplicationContext()在其构造函数)?


解决方案

明确的答案文档中出现的对的,在标题事件处理和线程

So it's not just things that obviously affect the appearance of the UI, like addView(), but "any method on any View".

The discussion on android-developers that @CommonsWare linked to has more than one high-level engineer from the Android framework team confirming that this is to be taken seriously.

这篇关于实例非UI线程视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 04:34