android – AsyncTask不是异步运行的

前端之家收集整理的这篇文章主要介绍了android – AsyncTask不是异步运行的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我没有误会,以下应该是相同的.
使用AsyncTask:
  1. private class GetDataTask extends AsyncTask<String,Void,String>{
  2.  
  3. @Override
  4. protected void onPreExecute() {
  5.  
  6. }
  7.  
  8. @Override
  9. protected String doInBackground(String... params) {
  10. return NetConnection.getRecordData(mUserId,mUserPassword);
  11. }
  12.  
  13. @Override
  14. protected void onPostExecute(String result) {
  15. parseJson(result);
  16. }
  17. }

使用线程:

  1. new Thread( new Runnable() {
  2.  
  3. @Override
  4. public void run() {
  5. String res = NetConnection. getRecordData(mUserId,mUserPassword);
  6. parseJson(res);
  7.  
  8. }
  9. }).start();

但是在上传文件时,AsyncTask会同步运行,而Thread会异步运行(并行).
为什么会这样?为什么AsyncTask的行为如下?是不是AsyncTask应该异步运行?
我有点困惑,所以我需要你的帮助.
这就是我调用GetDataTask的方法

  1. new GetDataTask().execute()

我更喜欢使用AsyncTask,但它不适合我.有关更多详细信息,请参阅我的early question

解决方法

从4.x调用2个AsyncTasks将导致它们被串行执行.

解决此问题的一种方法是使用以下代码

  1. if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
  2. myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
  3. }
  4. else {
  5. myTask.execute();
  6. }

您可以在以下网址阅读更多信息:http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html

猜你在找的Android相关文章