Bha*_*gav 3 java android intentservice
我有这个方法基本上等待单例队列中的项变为空,有一个后台服务正在运行,一旦它删除队列中的所有项并逐个处理,服务就会停止.这段代码在主线程中运行,当我在这里调用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();
}
Run Code Online (Sandbox Code Playgroud)
你永远不应该阻止UI线程.当您持有UI线程太长时间时,系统将显示一个对话框XXX is not responding并要求用户终止您的应用程序.
相反,您应该使用回调样式调用,并且当服务启动并且您从回调接收方法调用时,您将关闭该对话框.
编辑:
如上所述,您需要实现 BroadcastReceiver
这是我的其他东西的演示项目,您可以将其用作如何创建和使用的示例BroadcastReceiver.
https://github.com/cyfung/ActivityRecognitionSample
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |