java – 在显示Alert对话框时阻止UI线程是否可以
发布时间:2020-12-15 04:29:36 所属栏目:Java 来源:网络整理
导读:我有这个方法基本上等待单例队列中的项变为空,有一个后台服务正在运行,一旦它删除队列中的所有项并逐个处理,服务就会停止.这段代码在主线程中运行,当我在这里调用wait时会发生什么?警报对话框是否仍会显示并阻止用户执行任何其他操作? void waitForService
我有这个方法基本上等待单例队列中的项变为空,有一个后台服务正在运行,一旦它删除队列中的所有项并逐个处理,服务就会停止.这段代码在主线程中运行,当我在这里调用wait时会发生什么?警报对话框是否仍会显示并阻止用户执行任何其他操作?
void waitForService() { openConnectionToUploadQueue(); if(answersQueue.getCount(objInterviewQuestion.getQid()) <= 0){ answersQueue.close(); return; } if(!answersQueue.isInterviewUploadServiceRunning()) { answersQueue.startInterviewUploadService(); } AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(getString(R.string.auto_submit_alert_title)); builder.setCancelable(false); builder.setMessage(R.string.uploading_pending_answers); AlertDialog waitForServiceDialog = builder.create(); waitForServiceDialog.show(); while (answersQueue.getCount(objInterviewQuestion.getQid()) > 0) { // do nothing and keep loop running till answersQueue is empty } waitForServiceDialog.dismiss(); } 解决方法
你永远不应该阻止UI线程.当您持有UI线程太长时间时,系统将显示一个对话框,指出XXX没有响应并要求用户终止您的应用程序.
相反,您应该使用回调样式调用,并且当服务启动并且您从回调接收方法调用时,您将关闭该对话框. 编辑: 如上所述,您需要实现BroadcastReceiver 这是我的其他东西的演示项目,您可以将其用作如何创建和使用BroadcastReceiver的示例. https://github.com/cyfung/ActivityRecognitionSample (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |