amp*_*amp 19 multithreading android asynchronous task
我有两个问题:
onPreExecute(),onProgressUpdate(Progress...)并onPostExecute(Result)在UI线程上调用?我想知道,因为我在工作线程上运行了TCP连接,当收到数据包时,我想启动一个新线程来解析这个数据包,之后刷新UI线程上的一些数据结构.
提前致谢!
mfr*_*kli 15
"必须在UI线程上创建任务实例."和
必须在UI线程上调用"execute(Params ...)".
所以我认为你的第一个问题的答案是"不".至于第二种,这些方法都是在UI线程上调用的,但它有点没有实际意义.
编辑:我不确定这些是绝对的限制,还是强烈的建议,但在这两种情况下,我都建议遵循它们.
仅用于记录:如果在UI-Thread之外启动AsyncTask,则不会从UI-Thread(而是从调用者线程)执行onPreExecute.这将导致例外.但是,onPostExecute方法将始终在UI-Thread上执行.希望能帮助别人:)
根据Android doco,您必须从UI线程运行AsyncTask,但实际上它取决于谁首先在AsyncTask.class中运行此行:
private static final InternalHandler sHandler = new InternalHandler();
Run Code Online (Sandbox Code Playgroud)
如果你有一个从UI和工作线程调用的AsyncTask,你可能会首先从UI线程调用它来解决这个限制.如果你先从你的工作线程中找到它,那你就注定了.我宁愿不依赖于此,因为实现细节可以随时改变,但是如果你像我一样想知道"为什么我的其他AsyncTask工作",这个知识很有用.