Android 在性能方面,处理程序(MessageQueue)和异步任务(SERIAL_EXECUTOR)之间有什么区别?
有几种方法可以在应用程序中异步获取数据。一个是Android 在性能方面,处理程序(MessageQueue)和异步任务(SERIAL_EXECUTOR)之间有什么区别?,android,multithreading,android-asynctask,android-handler,Android,Multithreading,Android Asynctask,Android Handler,有几种方法可以在应用程序中异步获取数据。一个是处理程序,另一个是异步任务。现在我已经使用了这两种方法,并且想知道哪一种在某些任务中表现得更好/更有效 因此,我主要使用AsyncTasks获取Web数据,并使用Handler从服务到活动获取数据 我想知道对Webdata使用处理程序,或者使用AsyncTasks从服务刷新UI是否有好处。最大的区别是什么?因为,你的比较是。。。奇怪 AsyncTask非常适合于事务性工作:需要几毫秒以上几分钟的工作。对于这类工作,如果您不需要自己的线程管理,Asyn
处理程序
,另一个是异步任务
。现在我已经使用了这两种方法,并且想知道哪一种在某些任务中表现得更好/更有效
因此,我主要使用AsyncTasks
获取Web数据,并使用Handler
从服务
到活动
获取数据
我想知道对Webdata使用处理程序
,或者使用AsyncTasks从服务
刷新UI是否有好处。最大的区别是什么?因为,你的比较是。。。奇怪
AsyncTask
非常适合于事务性工作:需要几毫秒以上几分钟的工作。对于这类工作,如果您不需要自己的线程管理,AsyncTask
通常更易于使用
如果您有一些线程所需的特定特征,而异步任务
无法轻松处理,或者如果您在不确定的时间段内需要该线程(例如,直到用户按下停止按钮),请使用您自己的线程和其他东西来处理主应用程序线程:一个处理程序
,或post()
,或runOnUiThread()
。“不确定时间段”建议假定您使用的是一个内置线程池——我从不喜欢从您未设置的线程池中绑定线程。因为,您的比较是。。。奇怪
AsyncTask
非常适合于事务性工作:需要几毫秒以上几分钟的工作。对于这类工作,如果您不需要自己的线程管理,AsyncTask
通常更易于使用
如果您有一些线程所需的特定特征,而
异步任务
无法轻松处理,或者如果您在不确定的时间段内需要该线程(例如,直到用户按下停止按钮),请使用您自己的线程和其他东西来处理主应用程序线程:一个处理程序
,或post()
,或runOnUiThread()
。“不确定的时间段”建议假定您使用的是一个内置线程池——我从不喜欢将线程从未设置的线程池中绑定出来。看起来像异步任务
使用自己的内部处理程序。我的测试是使用处理程序的“post”立即排队。当在onCreate
中使用时,这可能会有问题,因为其他操作必须在onCreate
之后排队(尚未阅读有关此的Android活动等源代码)。因此,尝试发布以稍后加载布局不起作用。必须使用异步任务
。因为AsyncTask
有自己的内部处理程序;也许,然后创建任务可能会直接在onCreate
之后的队列中进行,但是doInBackground
和onPostExecute
可能会在队列中稍后进行
因此,AsyncTask
更适合此UI,需要稍后使用setContentView
加载过大的布局文件,这意味着在onCreate
之后可以显示ProgressDialog
<代码>进度对话框在完成创建后才会显示
另外,请参阅本文了解如何使用。基本上说,当想要更新用户界面。但实际上,您可以使用
runOnUIThread
来实现这一点,因此,如果您已经了解Java线程,就不需要处理程序或AsyncTask
runOnUIThread
就像Swing中的invoke/invokeLater一样。看起来像AsyncTask
使用自己的内部处理程序。我的测试是使用处理程序的“post”立即排队。当在onCreate
中使用时,这可能会有问题,因为其他操作必须在onCreate
之后排队(尚未阅读有关此的Android活动等源代码)。因此,尝试发布以稍后加载布局不起作用。必须使用异步任务
。因为AsyncTask
有自己的内部处理程序;也许,然后创建任务可能会直接在onCreate
之后的队列中进行,但是doInBackground
和onPostExecute
可能会在队列中稍后进行
因此,AsyncTask
更适合此UI,需要稍后使用setContentView
加载过大的布局文件,这意味着在onCreate
之后可以显示ProgressDialog
<代码>进度对话框在完成创建后才会显示
另外,请参阅本文了解如何使用。基本上说,当想要更新用户界面。但实际上,您可以使用runOnUIThread
来实现这一点,因此,如果您已经了解Java线程,就不需要处理程序或AsyncTask
runOnUIThread
就像Swing中的invoke/invokeLater一样