我使用AsyncTask來執行一個漫長的過程。從doInBackground中的函數內部publishProgress?
我不想將我的長處理代碼直接放在doInBackground中。相反,我的長程序代碼位於另一個類中,我在doInBackground中調用它。
我想能夠從longProcess函數內部調用publishProgress。 在C++中,我會將一個回調指針傳遞給我的longProcess函數publishProgress。
我該如何做到這一點在Java?
編輯:
我漫長的過程代碼:
public class MyLongProcessClass
{
public static void mylongProcess(File filetoRead)
{
// some code...
// here I would like to call publishProgress
// some code...
}
}
我的AsyncTask代碼:
private class ReadFileTask extends AsyncTask<File, Void, Boolean>
{
ProgressDialog taskProgress;
@Override
protected Boolean doInBackground(File... configFile)
{
MyLongProcessClass.mylongProcess(configFile[0]);
return true;
}
}
編輯#2 漫長的過程方法也可以是非靜態的,並呼籲像這個:
MyLongProcessClass fileReader = new MyLongProcessClass();
fileReader.mylongProcess(configFile[0]);
但這並不能改變我的問題。
它可以工作,如果我的LongOperation類沒有調用xmlReader.parse(耗時代碼所在的位置)。看起來我會陷入一個簡單的旋轉進度對話框。 – 2011-04-01 19:43:20
這似乎是一個很好的解決方案。豎起大拇指! – Wroclai 2011-04-01 21:42:11
@Regis St-Gelais如果你試圖監視解析的進度,你可以試試[這種方法]或者[這個方法](http://stackoverflow.com/questions/5015856/android-sax-parser-progress-monitoring)或[this一個](http://stackoverflow.com/questions/3100013/java-sax-parser-progress-monitoring) – 2011-04-01 21:49:52