问题描述
我知道的UI元素(查看层次)只能从UI线程进行操作。为后台操作,所述的AsyncTask可以使用,它提供了事件处理程序到达UI线程
要简短,它是允许在非UI线程创建一个视图(绑 getApplicationContext()
)?该自定义视图的后代 - 一旦实例化 - 从 UI线程添加到视图层次。因此,只有在构造函数调用中完成的 Asynctask.doInBackground()
;它的连接( addView(...)
)到活动的根布局层次仍然在UI线程中完成的。
在细节:
公共MyView的扩展视图{
公共MyView的(上下文的背景下){
...
}
...
}
-
我做了一个自定义的视图,与被覆盖的
的onDraw(...)
等。 -
当用户在我的主要活动点击某个菜单项,另一个活动(MyOtherActivity)被创建和显示的这屏幕是完全MyView的
-
由于MyOtherActivity的屏幕必须立即显示出来,我美元一个的AsyncTask而用户是其他地方的主要活动p $ P-MyView的实例化(即他没有点击的菜单项还)。该MyView的引用存储在静态数据成员
-
在
MyOtherActivity.onCreate()
被调用时,它的构造code MyView的需要从静态,并通过 addView(...)。 -
(我知道,静态变量可能会引入内存泄漏,所以我将它设置为
空
一旦它的没有必要的。)
这难道不是一个问题(可能是导致异常的问题)的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线程视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!