我在两个不同的类中有2个AsyncTasks,但问题是当第一个是在backgroung状态时,第二个没有被执行。第一个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);
}
}
}
答案 0 :(得分:3)
在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
祝你好运! P.S。不建议将AsyncTask
用于无限线程,AsyncTask
目的是在后台执行任务,而不是永远运行,所以如果你想要一个无限的线程,我认为你应该创建它Thread
而不是AsyncTask
。
答案 1 :(得分:0)
您的asynctasks有两种不同的活动。 任何时候只有一项活动有效。
答案 2 :(得分:-1)
这两个类都扩展了Activity,并且只有一个类同时运行。 如果您希望任务的执行时间超过活动的生命周期,则必须将其包装为Service