我正在尝试同时运行两个AsyncTasks.(平台是Android 1.5,HTC Hero.)但是,只有第一个被执行.这是一个描述我的问题的简单片段:
public class AndroidJunk extends Activity {
class PrinterTask extends AsyncTask<String, Void, Void> {
protected Void doInBackground(String ... x) {
while (true) {
System.out.println(x[0]);
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new PrinterTask().execute("bar bar bar");
new PrinterTask().execute("foo foo foo");
System.out.println("onCreate() is done.");
}
}
Run Code Online (Sandbox Code Playgroud)
我期望的输出是:
onCreate() is done.
bar bar bar
foo foo foo
bar bar bar
foo foo foo
Run Code Online (Sandbox Code Playgroud)
等等.但是,我得到的是:
onCreate() is done. …Run Code Online (Sandbox Code Playgroud) 截至2012年2月15日,我还没有找到一个很好的解释,也不知道为什么这不起作用.最接近解决方案的是使用传统的Thread方法,但为什么要包含一个在Android SDK中没有(似乎)工作的类?
Evenin'SO!
我有一个AsyncTask子类:
// ParseListener had a callback which was called when an item was parsed in a
// RSS-xml, but as stated further down it is not used at all right now.
private class xmlAsync extends AsyncTask<String, RSSItem, Void> implements ParseListener
Run Code Online (Sandbox Code Playgroud)
这是这样执行的:
xmlAsync xmlThread = new xmlAsync();
xmlThread.execute("http://www.nothing.com");
Run Code Online (Sandbox Code Playgroud)
现在这个子类遇到了一点错误.以前它做了一些xml-parsing,但是当我注意到它的doInBackground()没有被调用时,我逐行删除它,最后以这样结束:
@Override
protected Void doInBackground(String... params)
{
Log.v(TAG, "doInBackground");
return null;
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,没有记录任何内容.但是,我补充说:
@Override
protected void onPreExecute()
{
Log.v(TAG, "onPreExecute");
super.onPreExecute();
}
Run Code Online (Sandbox Code Playgroud)
并且在执行线程时确实记录了该行.所以不知何故onPreExecute()被调用但不是doInBackground().我在后台同时运行另一个AsyncTask,效果很好.
我目前正在模拟器上运行应用程序,SDK版本15,Eclipse,Mac …