我是否应该从 AsyncTask 的 OnPostExecute 更新 UI 元素?
Should I update UI elements from OnPostExecute of AsyncTask or not?
在我的 android 申请中,我想严格遵守 Android 准则。所以在执行 AsyncTask
之后,我有 2 个选项可以用结果更新 UI。
- 我可以使用回调侦听器将结果发送回主线程并从那里更新 UI。
- 我还可以将所需 UI 元素的引用传递给
AsyncTask
并在 onPostExecute
中更新这些元素。
那么,哪种方法更好,为什么?
较长的后台任务在 AsyncTask
的 onBackground
函数上 运行。在 onBackground
的末尾,onPostExecute
被调用,您应该在其中进行 UI 更改。
如果你的 AsyncTask
在你的 Activity 里面,它工作正常。您可以只更新 onPostExecute
内的 UI 视图,因为您可以访问它们。
当您的 AsyncTask
是一个单独的 class 并且您无权访问 Activity 的 UI 视图时,则在您的 onPostExecute
函数中您可以 return 结果到您的 Activity
并在那里更新 UI。
你要真正了解线程,如果它是一个简单的回调监听器,它不会改变代码所在的线程运行。如果是这种情况,那么方法(1)和(2)将或多或少相同。
如果你实际上指的是使用Handler
,那么它有一些区别,Handler
实际上排队回调并稍后在[=10=所在的线程中调用它] 已创建。
但是,由于 OnPostExecute
已经在 UI Thread
中,这意味着可以将 UI 元素更新为 (2)。 最重要 一点你应该知道的是你的 Activity
可能会在调用 OnPostExecute
时被销毁。如果是这样,您不应使用创建 AsyncTask
的 Activity
引用修改 UI。
如果您想在任务完成后更新 ui,这两种情况都适用。 onPostExecute
也在主线程中处理代码。哪种方法更好?这取决于您希望如何组织代码结构。
- 如果您只想更新 UI。我认为最好在
onPostExecute
中更新它们,因为你的代码会更简单明了。
- 不过,使用回调更灵活。因为你可以根据你传递的回调对任务结果做任何你想做的事情。
在我的 android 申请中,我想严格遵守 Android 准则。所以在执行 AsyncTask
之后,我有 2 个选项可以用结果更新 UI。
- 我可以使用回调侦听器将结果发送回主线程并从那里更新 UI。
- 我还可以将所需 UI 元素的引用传递给
AsyncTask
并在onPostExecute
中更新这些元素。
那么,哪种方法更好,为什么?
较长的后台任务在 AsyncTask
的 onBackground
函数上 运行。在 onBackground
的末尾,onPostExecute
被调用,您应该在其中进行 UI 更改。
如果你的 AsyncTask
在你的 Activity 里面,它工作正常。您可以只更新 onPostExecute
内的 UI 视图,因为您可以访问它们。
当您的 AsyncTask
是一个单独的 class 并且您无权访问 Activity 的 UI 视图时,则在您的 onPostExecute
函数中您可以 return 结果到您的 Activity
并在那里更新 UI。
你要真正了解线程,如果它是一个简单的回调监听器,它不会改变代码所在的线程运行。如果是这种情况,那么方法(1)和(2)将或多或少相同。
如果你实际上指的是使用Handler
,那么它有一些区别,Handler
实际上排队回调并稍后在[=10=所在的线程中调用它] 已创建。
但是,由于 OnPostExecute
已经在 UI Thread
中,这意味着可以将 UI 元素更新为 (2)。 最重要 一点你应该知道的是你的 Activity
可能会在调用 OnPostExecute
时被销毁。如果是这样,您不应使用创建 AsyncTask
的 Activity
引用修改 UI。
如果您想在任务完成后更新 ui,这两种情况都适用。 onPostExecute
也在主线程中处理代码。哪种方法更好?这取决于您希望如何组织代码结构。
- 如果您只想更新 UI。我认为最好在
onPostExecute
中更新它们,因为你的代码会更简单明了。 - 不过,使用回调更灵活。因为你可以根据你传递的回调对任务结果做任何你想做的事情。