我有一个读取calllog的类。这可能持续几分钟。如果我不想阻止gui线程,我必须使用一个线程。
在C#中,我启动一个线程,在数据准备就绪时通过事件通知gui线程,并在事件中将数据提供给gui。
但我应该如何用android做到这一点?到目前为止我读到的内容告诉我,最好在Android上使用AsyncTask。我以这种方式使用它(伪代码):
class MyClass{
private myClassVariable;
private coid startTask(){
GetDataTask data = new GetDataTask();
data.execute(varibale);
}
private void displayData{
doAnythingUsefullHere;
}
class GetDataTask extends AsyncTask<variables>{
protected variable doInBackground(variable){
return = CallLog.getData();
}
protected void onPostExecute(variable){
myclassVariable = variable;
displayData;
}
}
}
到目前为止工作正常,但我无法以这种方式取消线程。我可以取消任务,但是如果调用了onCancelled,我必须检查calllog类的数据收集循环,但是这个函数只在类GetDataTask中而不是在CallLog中已知。
有没有办法使用AsyncTask并使“外部”类可取消?或者我切换到线程和事件?在这种情况下,最好的方法是什么?