首先,对于我的具体问题,这个特别的问题没有得到回应。所以不要标记为重复,因为我在 StackOverflow 中还没有找到有效的响应。
考虑这段代码:
package xxx.MyActivity;
import com.xxx.R;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
public class MyActivity extends Activity {
private ProgressDialog progressDialog;
private AlertDialog.Builder alertDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
new MyTask().execute();
}
private class MyTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(MyActivity.this,
getText(R.string.activity_dialog_generic_title),
getText(R.string.activity_reading), true);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progressDialog.dismiss();
alertDialog = new AlertDialog.Builder(MyActivity.this);
alertDialog.setCancelable(false);
alertDialog.setMessage("dialog message");
alertDialog.setPositiveButton("yes", null);
alertDialog.setNegativeButton("no", null);
alertDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
int i = 0;
while (++i < 10) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
return null;
}
}
}
如您所见,progressDialog
和alertDialog
都是活动的变量。现在:
- 开始活动
- 等待显示进度
- 使用主页按钮“最小化”应用程序
- 等待 10 秒
- 返回应用程序
而且我没有警报对话框,并且 UI 被冻结(并且像显示对话框但屏幕上没有对话框时一样变灰)。后退按钮无效。
编辑:
在 onPostExecute() 中添加此代码:
alertDialog.setOnCancelListener(new AlertDialog.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
finish();
}
});
UI 看起来仍然冻结,但触摸屏幕(对话框取消)将关闭活动(如预期的那样:finish())。
我还尝试评论以下行alertDialog.show();
:没有冻结的 UI,所以问题出在AlertDialog
.