Sha*_*rad 5 multithreading android android-asynctask
即使AsyncTask在internalHandler中使用Looper.getMainLooper(),为什么也必须按文档中所述在UI线程上调用AsyncTask的方法?execute(Params...)
我尝试创建任务并从后台线程调用其execute(Params ...),它工作正常。
即使 AsyncTask 在 internalHandler 中使用 Looper.getMainLooper(),为什么必须按照文档中的说明在 UI 线程上调用
AsyncTask的方法execute(Params...)?
为什么有时会成为一个哲学问题......我检查AsyncTask了 Android API 25 的代码,但代码本身并没有给我们一个直接的答案。只有开发这个类的人知道为什么。
但是,代码告诉我们的是,它可以将调用从后台线程转发到 UI 线程,但事实并非如此。所以开发人员没有这样做的专业知识,或者是懒惰,或者想要强制执行一个模式,或者其他什么。
我尝试创建任务并从后台线程调用它的 execute(Params...) 并且它工作正常。
请注意它有效,但不能保证总是有效。多线程编程非常棘手,它的调试简直就是地狱。
在代码检查中,我注意到onPreExecute()调用是在调用execute(Params...). 因此,如果您execute(Params...)在后台线程中调用,它将破坏onPreExecute()在 UI 线程上运行的不变量。
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |