Android 显示ProgressDialog时避免锁定屏幕
我想在后台执行某些指令时显示progressBar,但我不想锁定屏幕。此代码正在锁定屏幕:Android 显示ProgressDialog时避免锁定屏幕,android,android-asynctask,Android,Android Asynctask,我想在后台执行某些指令时显示progressBar,但我不想锁定屏幕。此代码正在锁定屏幕: private class ConvertDataInBackground extends AsyncTask<Params, Void, Boolean> { private MyProgressDialog mProgressDialog; @Override public void onPreExecute() {
private class ConvertDataInBackground extends AsyncTask<Params, Void, Boolean> {
private MyProgressDialog mProgressDialog;
@Override
public void onPreExecute() {
if(mProgressDialog == null)
mProgressDialog = MyProgressDialog.show(mActivity, null, null);
}
@Override
protected Boolean doInBackground(Params...params) {
boolean conversionResult = executeConversion(params[0].item1, params[0].item2, params[0].item3);
return conversionResult;
}
@Override
protected void onPostExecute(Boolean result) {
try {
if(mProgressDialog.isShowing())
mProgressDialog.dismiss();
if(result) {
Toast toast = Toast.makeText(mActivity, R.string.conversion_result, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
私有类ConvertDataInBackground扩展异步任务{
私有MyProgressDialog mProgressDialog;
@凌驾
公共无效onPreExecute(){
如果(mProgressDialog==null)
mProgressDialog=MyProgressDialog.show(mActivity,null,null);
}
@凌驾
受保护的布尔doInBackground(Params…Params){
布尔转换结果=executeConversion(参数[0]。项1,参数[0]。项2,参数[0]。项3);
返回转换结果;
}
@凌驾
受保护的void onPostExecute(布尔结果){
试一试{
if(mProgressDialog.isShowing())
mProgressDialog.disclose();
如果(结果){
Toast Toast=Toast.makeText(mActivity,R.string.conversion\u result,Toast.LENGTH\u SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
}捕获(例外e){
e、 printStackTrace();
}
}
}
在后台执行指令可能需要一段时间,我希望用户能够使用该界面。
您知道当progressDialog显示在顶部时,我们可以使用界面吗?我认为在您的活动中,您必须指定“保持屏幕打开”标志:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
对我来说,它起作用了。Android中的对话框通常是模态的。您可以尝试创建对话框,然后将FLAG_NOT_TOUCH_MODAL添加到其窗口参数中,但我不确定它是否能工作。其背后的理念如下:
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage(...);
dialog.setTitle(...);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
同时请注意,只需在活动的布局中添加一个ProgressBar
,并在需要时显示它,而不是创建一个对话框,这可能会更容易——事实上,这是谷歌文档的建议。有这样的说法:
避免进程对话框
Android包含另一个名为ProgressDialog
的对话框类,显示
带有进度条的对话框。但是,如果您需要指示加载
或者不确定的进度,您应该遵循设计
进度和活动指南
,并在您的应用程序中使用进度条
布局
Android中的对话框通常是模态的。您可以尝试创建对话框,然后在其窗口参数中添加
FLAG\u NOT\u TOUCH\u MODAL
,但我不确定它是否有效。谢谢@AleksG。你可以分享你的答案,我会接受。看看PowerManager
API和WakeLock
方法。您可以调用各种标志来防止变暗、锁定和睡眠。