Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 显示ProgressDialog时避免锁定屏幕_Android_Android Asynctask - Fatal编程技术网

Android 显示ProgressDialog时避免锁定屏幕

Android 显示ProgressDialog时避免锁定屏幕,android,android-asynctask,Android,Android Asynctask,我想在后台执行某些指令时显示progressBar,但我不想锁定屏幕。此代码正在锁定屏幕: private class ConvertDataInBackground extends AsyncTask<Params, Void, Boolean> { private MyProgressDialog mProgressDialog; @Override public void onPreExecute() {

我想在后台执行某些指令时显示progressBar,但我不想锁定屏幕。此代码正在锁定屏幕:

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
方法。您可以调用各种标志来防止变暗、锁定和睡眠。