在两个不同的类中执行两个asynctask



我在两个不同的类中有2个AsyncTasks,但问题是当第一个是在后台状态时,第二个是不执行的。第一个asyncTask是在循环中执行的,因为它需要每5秒更新一次新数据。如果我停止任务(条件= flase)第二个工作完美。

第一课:

public class MapScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map_screen);
        UpdateUserCords updateUC = new UpdateUserCords();
        updateUC.execute();
    }
class UpdateUserCords extends AsyncTask<String, Void, String> 
{

    @Override
    protected String doInBackground(String... params) {

        while(condition)
        {
            //some code in loop...

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return null;
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected void onProgressUpdate(Void... values) {

        super.onProgressUpdate(values);
    }
    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
    }
}
}

第二个类:

public class Groups extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_groups);

    getGroups getGr = new getGroups();
    getGr.execute(); //not executing, no error or crash

}

class getGroups extends AsyncTask<String, Void, String> 
{

    ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
    @Override
    protected String doInBackground(String... params) {
        //some code...
        return null;
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
    }

}
}

在Android API 11之后,AsyncTask开始默认在串行执行器上运行,这意味着一次只有一个任务在运行。要获得在ThreadPoolExecutor上运行的API 11之前的行为,您需要在代码中像这样指定它:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
  myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else {
  myTask.execute();
}

请在这里查看更多信息:http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html

祝你好运!

注:不建议将AsyncTask用于无限线程,AsyncTask的目的是在后台执行任务,而不是永远运行,所以如果你想要一个无限线程,我认为你应该将其创建为Thread而不是AsyncTask

您的异步任务处于两个不同的活动中。每次只有一个活动

两个类都扩展Activity,并且只有其中一个在同一时间运行。如果你想让一个任务的执行时间长于一个活动的生命周期,你必须把它包装成一个Service

相关内容

  • 没有找到相关文章

最新更新