我知道 UI 元素(视图层次结构)只能从 UI 线程进行操作。对于后台操作,可以使用 AsyncTask,它提供事件处理程序以到达 UI 线程。
简而言之,是否允许getApplicationContext()
在非 UI 线程中实例化视图(绑定到)?这个自定义的 View 后代——一旦被实例化——就会从UI 线程添加到视图层次结构中。所以只有构造函数调用是在Asynctask.doInBackground()
; 将 ( addView(...)
) 附加到 Activity 的根布局层次结构仍然在 UI 线程中完成。
详细说明:
public MyView extends View {
public MyView(Context context) {
...
}
...
}
我做了一个自定义视图,覆盖
onDraw(...)
等。当用户在我的主 Activity 中单击某个 MenuItem 时,会创建另一个 Activity (MyOtherActivity) 并显示哪个屏幕正是 MyView
由于必须立即显示 MyOtherActivity 的屏幕,我在 AsyncTask 中预先实例化 MyView,而用户在主 Activity 的其他位置(即他还没有单击该 MenuItem)。MyView 引用存储在静态数据成员中。
当
MyOtherActivity.onCreate()
被调用时,它的构造函数代码从静态中获取 MyView,并通过addView(...)
.(我知道静态变量可能会导致内存泄漏,因此我将其设置为
null
不需要时。)
getApplicationContext()
MyView 在不同的线程中实例化(并在其构造函数中获取返回值)不是一个问题(并且可能会引入意想不到的问题)吗?