我正在努力解决 android 中的一些线程问题。 情况是,我有一个表,该表在用户的 ui 操作期间被填充。
并且该表被添加到队列中。到目前为止我选择了LinkedBlockingQueue
。
(如果这是一个坏主意,请纠正我)。
同时有一个后台线程,它应该获取(读取)队列并准备另一个表,然后将其本身传递给一个方法,该方法应该在 UI 线程上调用。
(这意味着,后台线程仅在后台收集排队表,以便稍后将它们传递给另一个方法)。
因此,我阅读了以某种方式执行此操作的各种方法,并发现自己处于 AsyncTask
中。
但是 AsyncTask
只允许我将预执行或后执行作为在 UI 线程中调用方法/代码的选项。
当我在 UI 线程上调用某些方法时,我想自己决定,因为后台线程在调用 UI 线程中的方法后仍然需要做一些工作。
啊,作为信息:
除非用户退出应用程序或发生特殊的空闲超时,否则后台线程永远不会停止。
并且:在 UI 线程上调用上述方法也将被参数化。
最佳答案
But async task only allows me pre execution or post execution as options to invoke methods/code in the ui thread.
没有。 onProgressUpdate()
也运行在UI Thread
上。您可以通过调用publishProgress()
来运行此函数。在doInBackground()
当 UI
需要在后台操作仍在运行时更新。
Here is an answer with an example of using it
请务必通读 AsyncTask Docs彻底几次。一开始它们有点棘手,直到你明白为止。
关于java - 安卓/Java。 AsyncTask/Thread 在我需要时将数据传递回 UI(不仅在执行前/执行后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639336/