为什么android中的AlertDialog要用一个内部的static class Builder来创建呢?

安卓ProgressDialog弃用原因与现代进度提示实现 在安卓开发中,进度提示是提升用户体验的关键组件。传统ProgressDialog通过阻塞UI线程实现模态等待,但随着异步编程和Material Design的普及,其线程阻塞和生命周期问题日益凸显。现代方案采用ProgressBar结合LiveData/ViewModel实现非阻塞式更新,遵循后台执行、状态持久化等原则。DialogFragment封装方案可兼容模态需求,而NotificationManager适合多任务场景。开发者需掌握线程安全、动画优化等进阶技巧,并注意内存泄漏预防。这些改进显著提升了应 阅读详情

最近看一些android的代码,发现他的AlertDialog是需要用类似下面的代码来创建的:

进入到AlertDialog的源代码,可以看到AlertDialog是继承于Dialog,并且他的构造函数都是声明成protected的。而Builder是一个内部的public static class. Builder的大部分方法是在设置一个AlertController.AlertParams 的object.只有在调用Builder.create或者show的时候(其实show也是先调用了create),才会真正的new一个AlertDialog的对象,并且把AlertParams的某些参数设置给这个AlertDialog对象。

 

但是我始终没想明白这样做会带来什么特别的效果或者说好处。只是为了结构上看起来稍微清晰一点?还是有深层次的含义呢?

 

结论:这是一个builder模式构建复杂对象的应用。在Builder.create中,或者在params的设置中,就能够实现对AlertDialog本身的约束规则。AlertDialog声明protected的构造函数就防止了外部代码不通过build而直接去new对象,造成约束失败的情况。

Android ProgressDialog废弃原因与现代替代方案 ProgressBar是Android官方推荐的标准化进度指示组件,用于在异步任务中提供可视化反馈;Dialog则是轻量可控的模态容器,二者组合可构建生命周期安全、主题兼容、可定制的加载提示。其核心原理在于解耦UI渲染与业务逻辑,通过ViewModel或弱引用管理状态,规避Activity重建导致的BadTokenException。技术价值体现在稳定性提升、内存泄漏防控及Material Design/You主题无缝适配。典型应用场景包括网络请求加载、文件上传进度、后台任务状态反馈等。本文深入剖析Prog 阅读详情

相关推荐

Android 权限管理 Intent 跳转:3种方案适配主流厂商与系统设置页

本文详细介绍了Android权限管理中Intent跳转的3种适配方案,包括厂商定制适配、应用详情页间接跳转和系统设置入口引导,帮助开发者解决系统碎片化和厂商定制化带来的挑战,实现高效权限管理。

weixin_33889665的博客 398

设计模式:Android AlertDialog的builder(建造者模式)

最近,公司一个大牛问了个问题,Android中的AlertDialog的创建方法AlertDialog.Builder 是什么形式,有什么好处? 所以,最近一直都在看设计模式。 然后自己一点总结,在此记录一下:建造者模式 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。 建造者模式的具体介绍,请移步我的上一篇blog 设计模式:Java

阿东 2215

python机器人编程——用python实现一个写字机器人

本篇我们构建一个可以跟人一样写字的机器人python软件。实现如下功能:打开一个写字板,人类在屏幕上写或画出任意形状,机器人同步在纸面上画出和人类一样的形状,就好像人类在远程操控机械臂,又或是机械臂是人的另一只手。这个软件是可以扩展的,如果连上互联网,可以实现人在北京写了一行字,在上海的机器臂同时也在自己的本子上写了一行字。

JAMES费的空间 7994

Android开发之Buidler模式初探结合AlertDialog.Builder讲解

什么是Buidler模式呢?就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.

林泓成的专栏 3181

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。do文件是conformal的脚本文件,可以由综合工具(RTL Compiler/Genus)自己产生(write_do_lec),也可以手写。

NanDigits的博客 7250

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1882

体会android的强大,最详细的对话框教程

  今天再来给大家分享一篇我发表在eoeandroid论坛的帖子,原帖地址:   http://www.eoeandroid.com/thread-32248-1-1.html   我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重...

weixin_34261415的博客 388

有限差分法地震数据正演模拟(二)

正演模拟,是在地球物理勘探研究中,根据地质体的形状、产状和物性数据,通过构造数学模型计算得到其理论值(数学模拟),或通过构造实体模型来观测模型所产生的地球物理效应的数值(物理模拟)。p(t+1,x,z)即为下一时刻的波长信息,该波动方程的意义就是通过前一时刻(p(t-1,x,z))和现在时刻(p(t,x,z))预测下一时刻波的传播情况。声波波动方程:反应声波的传播规律,描述最简单的波现象的方程,p代表波场信息,v表示速度场信息因为速度只与速度场有关,所以只与x,z有关。其结果也可以作为反演的验证。

weixin_46285501的博客 3937

滥用Static封装Dialog导致某些情况下Dialog show失败问题

由于静态的字段或方法在内存中只存在一份,所以利用这个特性可以做一些对象内存的优化,典型的就是单例的使用。然而stitic特性虽好,如果对全局的知识点掌握不够充分,还是会出现一些不易发现的bug的。最近使用公司项目中Dialog封装库就采坑了,,, 一、Dialog库以及引起的锅 1、DialogUtils 如下是一个简化版的封装库,但是前同事的这锅已经基本模拟出来了。 public class DialogUtils { private static final String TAG = .

dev晴天的博客 1364

AUTOSAR Dem模块实战配置:从理论到代码生成的完整指南

本文提供了一份AUTOSAR Dem模块从理论到代码生成的完整实战配置指南。文章详细拆解了配置流程,涵盖Dem模块的核心角色、通用骨架搭建、事件与DTC映射、消抖机制配置,以及与BswM、EcuM、DCM等模块的联调方法,旨在帮助汽车电子工程师快速掌握诊断事件管理的关键配置步骤,生成可运行的代码。

3c4x5z6v7b的博客 455

第3.4章 机器人第三方库实战总结(四):G2O优化库从入门到实战(附SLAM实例代码)

自定义边同样是满足复杂应用需求的重要手段。自定义边时,需要明确边所连接的顶点类型以及边所表示的误差项的计算方式。假设我们要定义一条边,用于约束两个上述自定义顶点之间的相对位姿和传感器偏移量关系。我们可以这样定义边类:public:// 计算误差// 计算雅可比矩阵// 读盘和存盘函数,这里暂不实现。

行知SLAM 358

androidUI第二部分---1.2.1Dialog,AlertDialog如何生成

Android.app包AlertDialog继承至Dialog,Activity中有可选的管理Dialog的几个回调函数android.app.SearchManager.onCreateDialog(int)和android.app.SearchManager.onPrepareDialog(int, Dialog)  另外对Dialog有两个接口进行可进行监听OnDismissListener和OnCancelListener监听事件触发后调用的方法分别为onDismiss(DialogInterfa

ytm419的专栏 1231

PX4从放弃到精通(三):使用qt编译PX4

1 下载px4源码 2在Firmware所在目录下执行 mkdir Firmware-build cd Firmware-build cmake …/Firmware -G “CodeBlocks - Unix Makefiles” -DCONFIG=nuttx_px4_fmu-v5_default 第三步最后的px4_fmu-v5_default根据自己的情况修改 执行完后如图 打开QT 点击打开工程 选择源码的CmakeLists.txt文件 选择imported Kit 打开项目那一栏,构建目

超维空间科技的博客 1万+

ChatTTS-ui 音色定制保姆级教程:3步选音色、导入音色文件、加上情绪效果

你有一批播客稿子,默认的朗读声有点"机器味",想换一种声音来念。ChatTTS-ui 是一个本地网页工具,能把中英文混合文本合成为语音,而音色定制这件事,它只需要几个数字和一个文件夹就能搞定。 ## 选个数字:3步拿到第一个能用的音色 1. 启动服务,打开网页(它同样对外开放 API 接口)。 2. 在音色下拉框里挑一个数字:2222、7869、6653、4099、5099,这些都是内置音色,

gitblog_00239的博客 411

手把手教你学Simulink——逆变器场景:基于PR控制器的单相逆变器并网控制策略仿真

摘要:本文详细介绍基于PR控制器的单相逆变器并网控制策略的Simulink仿真实现。首先分析PR控制器在单相逆变应用中的优势,然后逐步讲解模型搭建过程,包括主电路设计(直流电源、全桥逆变器、L滤波器)、控制回路实现(参考电流生成、坐标变换、PR控制器设计)以及关键参数设置。通过仿真验证了PR控制器对电网频率的精确跟踪能力,并网电流THD<3%。最后提出优化建议,如加入状态观测器、自适应参数整定等改进方向。该建模方法为可再生能源系统中的逆变器控制提供了有效验证手段。

MHD0815的博客 497

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Icarus-Android扩展开发:打造属于你的富文本编辑插件

Icarus-Android是一款专为Android平台设计的强大富文本编辑器,基于Simditor构建,提供了完整的富文本编辑功能。这款编辑器不仅功能丰富,还支持高度自定义的扩展开发,让开发者能够根据自己的需求打造专属的编辑体验。通过本文,您将学习如何为Icarus-Android开发自定义插件,扩展编辑器的功能边界。 ## 🚀 为什么选择Icarus-Android进行扩展开发? Ica

gitblog_00761的博客 461

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android源码下常用的Builder模式

/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * Yo

ao929929fei的专栏 491

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

安卓应用下载自动安装代码

转载请注明出处:https://blog.youkuaiyun.com/mr_leixiansheng/article/details/78054700 作用:下载应用、安装应用 代码如下: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://sc...

Mr_Leixiansheng的博客 1716

显示android设备所以已安装App 可点击启动、搜索

获取android设备已安装的所有app并列表展示,app名称*表示此app是系统应用,此activity无需任何xml文件

我的blog 948

android中,对话框用fragment 还是 dialog ?

对于大多数弹框需求,推荐使用 DialogFragment提供了良好的生命周期管理支持配置变化灵活性适中代码结构清晰原则:能用普通Dialog解决的问题,不要用DialogFragment。只有需要保存状态、处理生命周期时才用DialogFragment。

qq_39460057的博客 364

mr-mantou-android权限管理最佳实践:RxPermissions轻松搞定运行时权限

在Android应用开发中,权限管理是一个至关重要的环节。随着Android 6.0(API 23)引入了运行时权限机制,开发者需要更加优雅地处理权限请求。mr-mantou-android项目为我们展示了如何使用RxPermissions库来简化这一过程,让权限管理变得简单高效。本文将深入探讨这个开源项目中的权限管理实现,为你提供完整的Android权限管理最佳实践指南。😊 ## 为什么An

gitblog_00850的博客 728

Blockly 接入与使用指南:npm 安装、模块导入、代码生成器与多语言配置

Blockly 是一款基于 Web 的可视化编程编辑器,通过互锁的图形积木表达变量、逻辑表达式、循环等代码概念,让用户无需关心语法细节即可学习编程,并可将积木程序自动翻译为 Python、JavaScript、Lua 等文本语言。本文以 Blockly 官方 npm 包发布的 README([packages/blockly/scripts/package/README.md](https://l

gitblog_00290的博客 305

Android 17权限适配挑战与XXPermissions框架深度解析

在Android应用开发中,权限管理始终是开发者面临的核心技术难题。随着Android系统从6.0的运行时权限模型演进到Android 17的精细化权限控制,权限适配的复杂度呈指数级增长。XXPermissions作为目前唯一全面适配Android 17的权限请求框架,为开发者提供了从Android 4.0到Android 17的全版本兼容解决方案,解决了多版本系统适配、特殊权限处理、厂商定制化等

gitblog_00191的博客 6643

Android 权限申请全解析:从原理到实战

Android权限机制是保护用户隐私的核心设计。 从6.0开始引入运行时权限,将权限分为普通、危险和特殊三类,危险权限需用户动态授权。开发者需在清单声明权限,通过检查权限状态、处理拒绝情况等步骤实现权限申请。最佳实践包括最小权限原则、先解释后申请等。权限机制的本质是建立开发者与用户间的信任,开发者应尊重用户选择,只申请必要权限,并清晰说明用途。随着Android版本迭代,权限管理日趋精细化,开发者需做好版本适配。

记录和分享程序人生的点点滴滴 376
上一篇: java.nio.ByteBuffer的filp方法
下一篇: jboss AS7 如何监听所有地址
帅帅兔子
博客等级 码龄24年 7粉丝 29原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅帅兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值