我有一个简单的AsyncTask,其doInBackground()调用一个函数fn1,而函数fn1又调用另一个fn2。结果是“活动已泄露窗口”崩溃!当我直接从doInBackground()调用fn2时,一切正常。这是否意味着在一个线程中,不能有超过1级的fn调用?(Thread-> fn1-> fn2)
我是Java和Android的新手,所以如果这是一个基本问题,请耐心等待!日Thnx。
我的代码算法是这样的:
MyActivity:
MyLibrary myLib;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myXML);
myLib = new MyLibrary(MyActivity.this);
new myTask().execute();
}
private class myTask extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(MyActivity.this, "", "Fetching Data...");
}
@Override
protected Void doInBackground(Void... params) {
myLib.fn1();
return null;
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
}
}
MyLibrary:
Context ctx;
String iVar;
public MyLibrary(Context context){
this.ctx = context;
}
public void fn1()
{
fn2();
Log.d("TAG", "Function 1";
}
public void fn2()
{
iVar = "100";
Log.d("TAG", "Function 2";
}
答案 0 :(得分:2)
在您的活动代码中添加以下内容:
@Override
protected void onPause() {
super.onPause();
if(progressDialog != null)
progressDialog.dismiss();
}
如果您离开活动,它将关闭对话框窗口。
答案 1 :(得分:0)
通常,当您引用的Activity已从ActivityStack顶部删除时,会发生此错误。您应该检查AsyncTask是否已正确嵌入到Activity的生命周期中。
祝福, 添
答案 2 :(得分:0)
在嵌套函数调用期间,ProgressDialog可能会崩溃。