基本信息
书名:Android开发指南(第二版)
定价:99.00元
作者:李宁
出版社:人民邮电出版社
出版日期:2013-09-01
ISBN:9787115320339
字数:
页码:
版次:1
装帧:平装
开本:16开
商品重量:0.4kg
编辑推荐
**本Android 4.X新版本的图书
所有案例来自于作者的真实项目,技术实用性强,案例含金量高
内容提要
《Android开发指南(第二版)》是畅销书《Android开发指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。 《Android开发指南(第二版)》全面介绍了Android应用开发的各种技术,主要内容括Android的应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、可视化UI设计、对话框、Toast和通知栏(Notification)、Fragment、ActionBar、拖放技术、数据存储技术、Android支持的各种组件技术、通信技术(蓝牙、NFC、网络等)、异步装载、推送技术、多媒体、2D绘图技术、OpenGL ES、桌面小部件、动态壁纸、短信和彩信、传感器、GPS、谷歌地图、人机交互、输入法开发、Android NDK开发、测试驱动开发、性能优化等。 《Android开发指南(第二版)》并不局限于介绍Android的各种理论知识,而是从“实战”的角度介绍开发技术。《Android开发指南(第二版)》的所有示例都是精心设计的,足以使读者对当前讲解的理论知识驾轻就熟。这些示例中的很多例子都源于真实的项目,读者可以对这些示例的源程序稍加改动就可用于自己的项目中。《Android开发指南(第二版)》除了为每一个知识点提供完整的示例外,后还提供了两个完整的项目:笑脸连连看和NFC侠。这两个项目极具参考价值,尤其是NFC侠,是笔者维护的一个开源项目,用于在不支持NFC的手机或Android模拟器上开发和测试NFC应用。读者可以关注我的Blog(blog.csdn./nokiaguy)来获得NFC侠以及本书的*信息。 《Android开发指南(第二版)》适合有Java基础的读者阅读,如果读者已经掌握了Java的基本语法,那么《Android开发指南(第二版)》将会成为您的*和枕边书,您将从书中获得更多有价值的Android开发技术。
目录
目 录
章 初识Android平台 1
1.1 Android简介 1
1.2 Android的制胜法宝 2
1.3 Android的版本发展历程 3
1.3.1 Android 1.5(纸杯蛋糕) 3
1.3.2 Android 1.6(甜甜圈) 4
1.3.3 Android 2.1(松饼) 4
1.3.4 Android 2.2(冻酸奶) 5
1.3.5 Android 2.3(姜饼) 5
1.3.6 Android 3.0(蜂巢) 6
1.3.7 Android 4.0(冰激凌三明治) 6
1.3.8 Android 4.1/4.2(果冻豆) 7
1.4 Android的系统架构 8
1.5 小结 9
第2章 搭建Android开发和测试环境 10
2.1 搭建Android开发环境需要些什么 10
2.2 安装Java开发环境 10
2.2.1 安装K 11
2.2.2 安装和配置Eclipse 11
2.3 安装Android开发环境 12
2.3.1 下载和安装Android SDK 13
2.3.2 下载和安装Android NDK 13
2.3.3 安装和配置Eclipse插件:ADT 14
2.4 配置Android测试环境 15
2.4.1 建立Android虚拟设备(AVD) 15
2.4.2 启动Android模拟器 16
2.4.3 安装真机测试环境 17
2.5 小结 18
第3章 个Android应用程序 19
3.1 从个Android程序中可以学到什么 19
3.2 建立Android工程 19
3.3 Android工程的结构 21
3.4 在窗口上放两个按钮 22
3.5 编写窗口类 23
3.6 修改字符串资源 24
3.7 运行Android应用程序 25
3.8 调试Android应用程序 27
3.9 Android应用程序 27
3.10 小结 29
第4章 Android应用程序架构 30
4.1 Android应用程序中的资源 30
4.1.1 资源存放在哪里 30
4.1.2 资源的基本使用方法 30
4.2 Android的应用程序组件 32
4.2.1 窗口(Activity)组件 32
4.2.2 服务(Service)组件 32
4.2.3 广播接收者(Broadcast receivers)组件 33
4.2.4 内容提供者(Content Provider)组件 33
4.3 AndroidManifest.xml文件的结构 33
4.4 小结 34
第5章 窗口(Activity)与视图(View) 35
5.1 声明和使用Activity 35
5.1.1 Activity的基本用法 35
5.1.2 同时适合手机和平板电脑的窗口风格 38
5.2 Activity的生命周期 40
5.3 窗口的常用事件 43
5.3.1 设置窗口标题事件(onTitleChanged) 44
5.3.2 键盘按下和抬起事件(onKeyDown和onKeyUp) 45
5.3.3 任意情况下捕捉键盘事件(dispatchKeyEvent) 48
5.3.4 回退事件(onBackPressed) 49
5.3.5 按键长按事件(onKeyLongPress) 50
5.3.6 屏幕触摸事件(onTouchEvent) 50
5.3.7 窗口获得焦点事件(onWindowFocusChanged) 51
5.4 在不同Activity之间传递数据 52
5.4.1 使用Intent传递数据 53
5.4.2 使用静态变量传递数据 54
5.4.3 使用剪贴板传递数据 55
5.4.4 使用全局对象传递数据 57
5.5 从Activity返回数据 59
5.6 视图(View) 61
5.6.1 视图简介 61
5.6.2 使用XML布局文件定义视图 61
5.6.3 在代码中控制视图 62
5.7 显示系统窗口 64
5.7.1 直接拨号 65
5.7.2 将号传入拨号程序 65
5.7.3 调用拨号程序 65
5.7.4 浏览网页 65
5.7.5 查看联系人 66
5.7.6 显示系统设置界面(设置主界面、Wi-Fi设置界面) 66
5.7.7 启动处理音频的程序 66
5.7.8 回到Home窗口(相当于按Home键) 66
5.8 与Activity相关的技巧与特效 67
5.8.1 全屏显示(隐藏标题栏和状态栏) 67
5.8.2 定制窗口标题栏 71
5.8.3 为程序添加Splash 75
5.8.4 改变窗口大小、位置和透明度 76
5.8.5 按两次关闭窗口 79
5.8.6 关闭所有的窗口 79
5.8.7 窗口截屏 80
5.9 小结 82
第6章 Intent与Intent Filter 83
6.1 Android系统的信使:Intent 83
6.2 Intent对象 84
6.2.1 Intent对象可以封装和传递哪些信息 84
6.2.2 组件名(Component name) 84
6.2.3 动作(Action) 85
6.2.4 种类(Category) 86
6.2.5 数据(Data) 87
6.2.6 附加数据(Extra) 88
6.2.7 标志(Flags) 89
6.3 显式和隐式访问窗口 89
6.4 跨应用程序访问窗口 90
6.5 Android系统的过滤机制大揭秘 96
6.5.1 过滤条件的设置 96
6.5.2 过滤器的筛选规则 97
6.5.3 示例:过滤机制应用演示 101
6.6 Android源代码与过滤器 104
6.6.1 系统内置程序有哪些窗口可以利用 104
6.6.2 显示计算器(Calculator) 105
6.6.3 用(Browser)显示网页 106
6.6.4 拨打(Phone)与授权 108
6.7 获取第三方程序中可调用的窗口 109
6.8 传递附加数据(Extra) 111
6.9 解析数据 113
6.10 小结 114
第7章 窗口(Activity)高级技术 115
7.1 Activity XML属性详解 115
7.1.1 设置Activity的基本信息 115
7.1.2 屏幕方向切换(android:screenOrientation) 117
7.1.3 阻止Activity销毁和重建(android:configChanges) 119
7.1.4 允许Activity被实例化(android:enabled) 123
7.1.5 在近应用列表中显示(android:excludeFromRecents) 124
7.1.6 允许其他程序访问当前窗口(android:exported) 124
7.1.7 硬件加速(android:hardwareAccelerated) 125
7.1.8 在多进程中创建窗口实例(android:multiprocess) 125
7.1.9 无法返回的Activity(android:noHistory) 125
7.1.10 指定要返回的窗口(android:parentActivityName) 126
7.1.11 使窗口受到权限的保护(android:permission) 126
7.1.12 改变窗口所在的进程(android:process) 127
7.1.13 不保存窗口的状态(android:stateNotNeeded) 129
7.1.14 窗口的主题(android:theme) 129
7.1.15 扩展窗口UI(android:uiOptions) 129
7.1.16 设置输入法显示模式(android:windowSoftInputMode) 130
7.2 深入探索Activity从创建到销毁的过程 130
7.2.1 任务(Task)与回退栈(Back Stack) 131
7.2.2 保存窗口(Activity)状态 133
7.2.3 管理任务和回退栈 134
7.2.4 Activity的4种创建模式 135
7.2.5 用Java代码设置窗口创建模式 141
7.2.6 窗口的乾坤大挪移(affinity) 144
7.2.7 销毁不再使用的窗口 147
7.3 Activity的别名 149
7.4 小结 151
第8章 布局 152
8.1 Android的五大布局 152
8.1.1 框架布局(FrameLayout) 152
8.1.2 线性布局(LinearLayout) 154
8.1.3 相对布局(RelativeLayout) 158
8.1.4 表格布局(TableLayout) 159
8.1.5 布局(AbsoluteLayout) 160
8.2 属性资源与Android命名空间 160
8.3 布局属性 162
8.4 布局高级技术 163
8.4.1 布局别名 163
8.4.2 重用布局 164
8.4.3 优化布局 166
8.4.4 动态装载布局 167
8.4.5 动态设置布局属性 169
8.4.6 从右到左布局(RTL Layout) 169
8.5 小结 170
第9章 菜单 171
9.1 菜单的基本用法 171
9.1.1 创建选项菜单(Options Menu) 171
9.1.2 关联Activity 173
9.1.3 响应菜单的单击动作 173
9.1.4 动态添加、修改和删除选项菜单 174
9.1.5 带复选框和选项按钮的子菜单 175
9.1.6 上下文菜单 176
9.1.7 菜单事件 177
9.1.8 从菜单资源中装载菜单 177
9.2 菜单特效 177
9.2.1 自定义菜单 178
9.2.2 模拟UCWeb菜单效果 180
9.3 小结 184
0章 Android的资源详解(一) 185
10.1 创建资源 185
10.1.1 手工创建资源文件 185
10.1.2 用ADT模板创建本地化图标资源 186
10.1.3 用ADT模板创建XML文件资源 188
10.2 使用资源 188
10.2.1 生成资源类文件(R.java) 188
10.2.2 从XML文件中访问资源 190
10.2.3 使用Java代码访问资源 191
10.2.4 Java反射技术与枚举资源 192
10.3 字符串(String)资源 193
10.3.1 普通字符串 193
10.3.2 字符串数组 194
10.3.3 复数字符串 194
10.3.4 在字符串中使用引号 195
10.3.5 用占位符格式化字符串 195
10.3.6 用HTML标签格式化字符串资源 195
10.4 值(values)资源 196
10.4.1 整数(Integer)资源 196
10.4.2 尺寸(Dimension)资源 197
10.4.3 布尔(Boolean)资源 198
10.4.4 颜色(Color)资源 198
10.4.5 ID资源 199
10.4.6 整数数组(Integer-Array)资源 200
10.4.7 类型数组(Typed-Array)资源 200
10.5 菜单(menu)资源 200
10.6 图像(drawable)资源 203
10.6.1 普通图像资源 203
10.6.2 XML图像资源 204
10.6.3 Nine-Patch图像资源 204
10.6.4 XML Nine-Patch图像资源 205
10.6.5 图层(Layer)资源 205
10.6.6 图像状态(State)资源 206
10.6.7 图像级别(Level)资源 207
10.6.8 淡入淡出(Cross-fade)资源 208
10.6.9 嵌入(Inset)图像资源 210
10.6.10 剪切(Clip)图像资源 210
10.6.11 外形(Shape)资源 211
10.7 小结 212
1章 Android的资源详解(二) 213
11.1 动画资源 213
11.1.1 属性(Property)动画 213
11.1.2 帧(Frame)动画 215
11.1.3 移动补间(TranslateTween)动画 217
11.1.4 循环向右移动的EditText与上下弹跳的球 218
11.1.5 缩放补间(Scale Tween)动画 220
11.1.6 跳动的心 221
11.1.7 旋转补间(Rotate Tween)动画 222
11.1.8 旋转的星系 222
11.1.9 透明度补间(Alpha Tween)动画 223
11.1.10 投掷炸弹 224
11.1.11 震动渲染器(Shake Interpolator) 226
11.1.12 自定义渲染器(Interpolator) 227
11.2 风格(Style)资源与主题(Theme) 229
11.3 小结 232
2章 资源的本地化 233
12.1 建立本地化的资源目录 233
12.2 资源目录的命名规则 237
12.3 建立别名资源 237
12.3.1 图像别名资源 237
12.3.2 布局别名资源 238
12.3.3 字符串别名资源 238
12.3.4 其他简单值别名资源 238
12.4 资源目录的优先级 238
12.5 屏幕适配 239
12.5.1 屏幕适配要考虑的因素 239
12.5.2 适配不同屏幕可以采用的规则 241
12.5.3 屏幕尺寸和屏幕密度 241
12.5.4 位置、尺寸和字体应使用屏幕密度单位 244
12.5.5 与屏幕适配有关的标识符 244
12.5.6 影响屏幕适配的重要因素:布局和图像 245
12.5.7 典型的屏幕适配案例 246
12.5.8 在Google Play上限制屏幕尺寸和屏幕密度 247
12.5.9 在Android模拟器上测试各种屏幕尺寸和密度 248
12.6 小结 248
3章 Android的控件详解(一) 249
13.1 显示文本的控件(TextView) 249
13.1.1 显示富文本(URL、不同大小、字体、颜色的文本) 250
13.1.2 用标签在TextView控件上显示图像 252
13.1.3 单击链接弹出Activity 254
13.1.4 为指定文本添加背景 256
13.2 编辑文本的控件(EditText) 258
13.2.1 像一样输入表情图像 259
13.2.2 在EditText中输入特定的字符 260
13.2.3 AutoCompleteTextView(自动完成输入内容的控件) 261
13.3 按钮(Button)和复选框(Checkbox)控件 263
13.3.1 Button(普通按钮控件) 263
13.3.2 图文混排的按钮 265
13.3.3 ImageButton(图像按钮控件) 266
13.3.4 RadioButton(选项按钮控件) 267
13.3.5 ToggleButton(开关状态按钮控件) 267
13.3.6 CheckBox(复选框控件) 268
13.4 图像控件(ImageView) 270
13.4.1 ImageView控件的基本用法 270
13.4.2 显示指定区域的图像 270
13.4.3 缩放和旋转图像 272
13.5 时间与日期控件 273
13.5.1 DatePicker(输入日期的控件) 273
13.5.2 TimePicker(输入时间的控件) 274
13.5.3 DatePicker、TimePicker与TextView同步显示日期和时间 274
13.5.4 AnalogClock和DigitalClock(显示时钟的控件) 275
13.6 小结 275
4章 Android的控件详解(二) 276
14.1 进度条控件 276
14.1.1 ProgressBar(进度条控件) 276
14.1.2 SeekBar(拖动条控件) 278
14.1.3 设置ProgressBar和SeekBar的颜色及背景图 278
14.1.4 RatingBar(评分控件) 281
14.2 列表控件 282
14.2.1 ListView(普通列表控件) 282
14.2.2 为ListView列表项添加复选框和选项按钮 285
14.2.3 对列表项进行增、删、改操作 286
14.2.4 改变列表项的背景色 290
14.2.5 ListActivity(封装ListView的Activity) 290
14.2.6 ExpandableListView(可扩展的列表控件) 291
14.2.7 Spinner(下拉列表控件) 293
14.3 GridView(网格控件) 296
14.4 TabHost(标签控件) 298
14.5 ViewStub(惰性装载控件) 299
14.6 小结 300
5章 可视化UI设计 301
15.1 拖放控件 301
15.2 设置视图属性 303
15.3 预览各种屏幕尺寸 303
15.4 语言和地区的本地化测试 304
15.5 其他可视化功能 304
15.6 小结 305
6章 对话框、Toast与通知栏(Notification) 306
16.1 对话框 306
16.1.1 带2个按钮(确认/取消)的对话框 306
16.1.2 带3个按钮(覆盖/忽略/取消)的对话框 307
16.1.3 简单列表对话框 308
16.1.4 单选列表对话框 309
16.1.5 多选列表对话框 311
16.1.6 进度对话框 312
16.1.7 登录对话框 315
16.1.8 使用Activity托管对话框 316
16.2 Toast 318
16.3 通知(Notification) 319
16.3.1 在状态栏上显示通知信息 319
16.3.2 存在的Notification 322
16.3.3 自定义Notification 323
16.4 小结 324
7章 封装UI和代码利器——Fragment 325
17.1 Fragment简介 325
17.2 什么时候使用Fragment 326
17.3 按照Fragment设计原则编写程序 328
17.4 Fragment的生命周期 332
17.5 创建Fragment 341
17.5.1 通过XML布局文件创建Fragment 341
17.5.2 通过Java代码创建Fragment 342
17.5.3 创建无UI的Fragment 344
17.5.4 在低版本Android中使用Fragment(Support Library) 345
17.6 Activity与Fragment之间的交互 346
17.6.1 Fragment与Activity之间的交互 346
17.6.2 Fragment的回调机制 348
17.7 Fragment状态的持久化 351
17.8 Fragment与回退栈(导航) 355
17.9 FragmentManager与FragmentTransaction 357
17.9.1 管理Fragment事务 357
17.9.2 查找Fragment 357
17.9.3 跟踪回退栈状态 358
17.9.4 恢复历史状态 358
17.9.5 管理Fragment的状态 359
17.9.6 添加、删除和替换Fragment 359
17.9.7 分离(Detach)与附加(Attach)Fragment 360
17.9.8 显示和隐藏Fragment 361
17.10 Fragment扩展 361
17.10.1 ListFragment 361
17.10.2 DialogFragment 363
17.10.3 其他Fragment扩展类 366
17.11 Fragment模板源代码分析 366
17.12 小结 368
8章 动作栏——ActionBar 369
18.1 ActionBar简介 369
18.2 ActionBar基础 370
18.2.1 隐藏/显示ActionBar 370
18.2.2 添加和响应Action按钮 372
18.3可上下两分的ActionBar 374
18.4 应用程序图标导航 376
18.5 收缩和展开Action View 377
18.6 ActionProvider 380
18.6.1 分享信息(ShareActionProvider) 380
18.6.2 定制ActionProvider 382
18.7 导航标签 384
18.8 下拉导航列表 388
18.9 小结 390
9章 Android的拖放技术 391
19.1 Android中的拖放操作 391
19.2 拖放状态与拖放处理 391
19.3 拖动阴影 392
19.4 示例:拖动复制图像 393
19.5 小结 395
第20章 数据存储解决方案 396
20.1 读写key-value对:SharedPreferences 396
20.2 文件流操作 397
20.2.1 openFileOutput和openFileInput方法 398
20.2.2 读写SD卡中的文件 399
20.3 读写JSON格式的数据 400
20.4 SQLite数据库 404
20.4.1 SQLite数据库管理工具 404
20.4.2 SQLiteOpenHelper类与自动升级数据库 405
20.4.3 数据绑定与SimpleCursorAdapter类 406
20.4.4 操作SD卡上的数据库 409
20.4.5 将数据库与应用程序一起发布 410
20.4.6 内存数据库 411
20.5 小结 412
第21章 内容提供者(Content Provider) 413
21.1 Content Provider的作用 413
21.2 获得系统数据 413
21.2.1 读取联系人信息 414
21.2.2 查看收件箱的短信 415
21.3 自定义Content Provider 417
21.3.1 查询城市信息 417
21.3.2 为Content Provider添加访问权限 422
21.4 如何查找系统提供的Content Provider 423
21.5 小结 425
第22章 广播接收器(Broadcast Receiver) 426
22.1 什么是广播 426
22.2 接收系统广播 427
22.2.1 短信拦截 427
22.2.2 用代码注册广播接收器 429
22.2.3 广播接收器的优先级 429
22.2.4 来去电拦截 430
22.2.5 截获屏幕休眠与唤醒 432
22.2.6 开机自动运行 433
22.2.7 显示手机电池的当前电量 434
22.3 发送广播 434
22.4 小结 435
第23章 服务(Service) 436
23.1 Service基础 436
23.1.1 Service的生命周期 436
23.1.2 开机启动Service 438
23.2 跨进程访问(AIDL服务) 439
23.2.1 什么是AIDL服务 439
23.2.2 建立AIDL服务的步骤 439
23.2.3 创建和调用AIDL服务 440
23.2.4 传递复杂数据的AIDL服务 442
23.2.5 AIDL与来去电自动挂断 445
23.3 小结 447
第24章 Android的组件开发 448
24.1 Android支持哪些组件开发方式 448
24.2 引用jar文件 449
24.3 跨工程引用 450
24.4 引用NDK Library 451
24.5 动态引用APK文件 451
24.6 动静结合的组件 453
24.7 脚本类型组件()与WebView控件 453
24.8 如何确定动态组件是否安装 457
24.9 升级动态组件 459
24.10 小结 461
第25章 Android的蓝牙开发技术 462
25.1 蓝牙简介 462
25.2 打开和关闭蓝牙设备 462
25.3 搜索蓝牙设备 463
25.4 蓝牙数据传输 465
25.5 蓝牙通信需要UUID吗 467
25.6 小结 467
第26章 近距离天线通信——NFC技术 468
26.1 NFC简介 468
26.2 NFC、蓝牙和红外之间的差异 469
26.3 NFC技术的未来前景 470
26.4 Android中的NFC技术 471
26.4.1 NDEF与NDEF数据 471
26.4.2 NFC的三重过滤机制 471
26.4.3 开启Android的NFC功能 472
26.4.4 编写NFC程序的基本步骤 473
26.5 测试NFC程序需要的设备 474
26.6 让Android手机自动运行程序 475
26.6.1 向NFC标签写入数据的基本步骤 475
26.6.2 向NFC标签写入启动Android应用程序的消息 476
26.7 让Android手机自动打开网页 483
26.8 读写NFC标签中的文本 485
26.8.1 实现读写文本数据应用的基本思路 485
26.8.2 如何将NFC标签变成NDEF文本格式 485
26.8.3 NDEF文本格式解析 486
26.8.4 实现读写文本数据的Android应用程序 490
26.9 读写NFC标签中的Uri 496
26.9.1 NDEF Uri格式解析 496
26.9.2 实现读写Uri的Android应用程序 499
26.10 利用NFC标签支持的数据格式进行过滤 502
26.11 处理任意NFC标签 504
26.12 读写NDEF格式的数据 505
26.13 Android Beam技术与数据交互 507
26.13.1 传递NDEF消息 507
26.13.2 传输文件 511
26.14 小结 513
第27章 Android的网络开发技术 514
27.1 提交 GET和 POST请求 514
27.2 HttpURLConnection类 516
27.3 上传文件 517
27.4 下载管理(DownloadManager) 519
27.5 Wi-Fi Direct 524
27.5.1 Wi-Fi Direct API的核心部分 524
27.5.2 创建监听Wi-Fi Direct动作的广播接收器 524
27.5.3 注册广播接收器 525
27.5.4 发现Wi-Fi Direct设备 526
27.5.5 连接Wi-Fi Direct设备 526
27.5.6 数据传输 527
27.6 Inter(SIP) 528
27.6.1 使用SIP的要求和限制 528
27.6.2 配置Android版SIP 528
27.6.3 创建SipManager 529
27.6.4 注册SIP服务器 529
27.6.5 开始打 530
27.6.6 接听 530
27.7 小结 531
第28章 并发与定时器 532
28.1 Handler 532
28.1.1 更新UI 532
28.1.2 延迟执行 535
28.2 定时器 537
28.2.1 单秒循环的定时器:Chronometer 537
28.2.2 任意时间间隔的定时器:Timer 538
28.2.3 全局定时器:AlarmManager 539
28.3 AsyncTask 541
28.4 小结 543
第29章 异步装载(Loader) 544
29.1 Loader简介 544
29.2 Loader的核心类/接口 544
29.3 如何使用Loader 545
29.3.1 创建/重用Loader 545
29.3.2 遗弃旧的数据 546
29.3.3 LoaderManager与方法回调 546
29.3.4 创建Loader对象(onCreateLoader) 547
29.3.5 完成数据装载(onLoadFinished) 547
29.3.6 Loader被重置(onLoaderReset) 548
29.4 异步装载联系人(CursorLoader的应用) 548
29.5 小结 552
第30章 Android推送技术 553
30.1 IOS的推送方案 553
30.2 Windows Phone的推送方案 554
30.3 Android的推送方案 554
30.4 第三方推送服务:极光推送 556
30.5 自己搭建推送服务器:AndroidPN 557
30.6 小结 558
第31章 Android的多媒体开发技术 559
31.1 音频 559
31.1.1 音频播放 559
31.1.2 录制音频 561
31.2 视频 563
31.2.1 播放视频 563
31.2.2 录制视频 564
31.3 相机 565
31.3.1 调用系统的拍照功能 565
31.3.2 自定义拍照功能 566
31.4 铃声 570
31.5 小结 572
第32章 Android的2D绘图 573
32.1 绘制基本的图形 573
32.1.1 绘制像素点 573
32.1.2 绘制直线 574
32.1.3 绘制圆形 574
32.1.4 绘制圆弧 574
32.1.5 绘制文本 575
32.1.6 示例:绘制基本的图形和文本 575
32.2 绘制位图 578
32.2.1 绘制Bitmap对象 578
32.2.2 使用Drawable.draw方法绘制位图 579
32.2.3 示例:用两种方式绘制位图 579
32.3 设置图像的透明度 580
32.4 旋转图像 581
32.5 小结 583
第33章 3D绘图之OpenGL ES 584
33.1 OpenGL ES简介 584
33.2 在3D空间中绘图 585
33.2.1 要绘制3D图形了,步要做什么 585
33.2.2 定义顶点 587
33.2.3 绘制三角形 588
33.2.4 三角形合并法绘制矩形 590
33.2.5 顶点法绘制矩形 592
33.2.6 顶点的选取顺序 592
33.2.7 索引法绘制矩形 593
33.2.8 基于OpenGL ES的动画原理 594
33.2.9 旋转的矩形 594
33.3 视图 595
33.3.1 有趣的比喻:照相机拍照 596
33.3.2 模型变换:立方体旋转 597
33.3.3 用gluLookAt方法变换视图 599
33.4 颜色 600
33.5 小结 602
第34章 Android的桌面上的“尤物” 603
34.1 窗口小部件(App Widget) 603
34.1.1 在Android桌面上添加App Widget 603
34.1.2 开发App Widget的步骤 603
34.1.3 数字时钟 605
34.1.4 AppWidgetProvider类 607
34.1.5 向App Widget添加配置窗口 608
34.1.6 可以选择风格的数字时钟 608
34.2 动态壁纸(变换的圆圈) 612
34.3 小结 618
第35章 Android中的短信(SMS)与彩信(MMS)开发技术 619
35.1 通过系统程序发短信 619
35.2 直接发送短信 619
35.3 保存短信发送记录 620
35.4 监听短信和彩信 621
35.5 显示视频缩略图 622
35.6 彩信内容与SMIL协议 624
35.7 小结 631
第36章 Android的传感器开发技术 632
36.1 如何使用传感器 632
36.2 加速度传感器(Accelerometer) 635
36.3 重力传感器(Gravity) 635
36.4 光线传感器(Light) 636
36.5 陀螺仪传感器(Gyroscope) 636
36.5 方向传感器(Orientation) 637
36.6 其他传感器 638
36.7 小结 638
第37章 Android的全球定位系统(GPS) 639
37.1 GPS的核心API 639
37.2 获取位置提供者(LocationProvider) 641
37.2.1 获取所有可用的LocationProvider 641
37.2.2 根据名称获取LocationProvider 642
37.2.3 根据条件(Criteria)获取LocationProvider 642
37.3 实时获取GPS定位数据 643
37.4 测量地球上任意两点之间的距离 645
37.5 邻近警告 646
37.6 小结 647
第38章 谷歌地图(Google Map)开发应用 648
38.1 Google Map的跨平台解决方案:Maps API v3 648
38.2 Google Map的显示与定位 648
38.3 在Google Map上插入图像标志 651
38.4 插入多个图像标志 653
38.5 带阴影的位置坐标信息 653
38.6 地图与Java交互 655
38.7 小结 657
第39章 Android中的人机交互设计 658
39.1 手势(Gesture) 658
39.1.1 创建手势文件 658
39.1.2 通过手势输入字符串 658
39.1.3 通过手势调用程序 660
39.1.4 编写自己的手势创建器 661
39.2 多点触摸与放大/缩小操作 662
39.3 语音识别 664
39.4 让手机说话(TTS) 665
39.5 小结 666
第40章 Android中的输入法开发 667
40.1 Android输入法简介 667
40.2 控制输入法 668
40.3 输入法实战 669
40.3.1 实现输入法的步骤 669
40.3.2 编写输入法程序 669
40.3.3 输入法服务的生命周期 672
40.3.4 预输入文本 672
40.3.5 输入法设置 673
40.4 小结 673
第41章 Android NDK开发 674
41.1 Android NDK简介 674
41.2 安装、配置和测试NDK开发环境 674
41.2.1 系统和软件要求 675
41.2.2 下载和安装Android NDK 675
41.2.3 下载和安装Cygwin 675
41.2.4 配置Android NDK的开发环境 677
41.3 利用NDK Samples学习NDK开发 678
41.3.1 编译NDK Samples 678
41.3.2 NDK程序的结构与命名规则 678
41.4 Android NDK配置文件详解 679
41.4.1 Android NDK定义的变量 680
41.4.2 Android NDK定义的函数 680
41.4.3 描述模块的变量 681
41.4.4 配置Application.mk文件 682
41.5 个NDK示例:字母的大小写转换 682
41.5.1 编写NDK程序 682
41.5.2 编写调用NDK函数的Java程序 684
41.5.3 在Eclipse中开发和编译NDK程序 684
41.6 NDK程序读取Java字段值 686
41.7 小结 687
第42章 Android的测试驱动开发(TDD) 688
42.1 JUnit测试框架 688
42.2 测试Activity 688
42.3 测试Content Provider 691
42.4 测试Service 692
42.5 测试普通类 692
42.6 小结 693
第43章 Android应用的性能优化 694
43.1 性能优化的基础知识 694
43.2 编写Java程序的优化原则 695
43.2.1 用静态工厂方法代替构造方法 695
43.2.2 避免创建重复的对象 695
43.2.3 防止内存泄漏 697
43.2.4 返回零长度的集合而不是null 697
43.2.5 通过接口引用对象 698
43.3 避免ANR 698
43.4 执行时间测试 699
43.5 内存消耗测试 700
43.6 测试性能的工具:traceview 701
43.7 小结 702
第44章 游戏项目实战:笑脸连连看 703
44.1 游戏玩法 703
44.2 准备图像素材 703
44.3 实现主界面 704
44.4 生成连连看图像 705
44.5 选中两个相同图像后消失 705
44.6 用定时器限制游戏时间 706
44.7 小结 707
第45章 开源项目实战:NFC侠(NFCMan) 708
45.1 什么是NFCMan 708
45.2 用Android模拟器和NFC设备测试NFC应用 709
45.3 NFCMan的实现原理 711
45.4 实现服务端程序(NFCMan) 711
45.4.1 可视化SWT开发环境 712
45.4.2 创建NFC标签 712
45.4.3 描述虚拟NFC标签的NFCTag类 714
45.4.4 保证虚拟NFC标签的全局 715
45.4.5 显示与保存虚拟NFC标签 716
45.4.6 装载已经存在的虚拟NFC标签 719
45.4.7 开启服务 720
45.4.8 处理客户端请求 721
45.4.9 保证虚拟Android设备全局 723
45.4.10 描述虚拟Android设备 724
45.4.11 添加虚拟Android设备 725
45.4.12 异常处理机制 727
45.5 客户端与服务端之间的数据管道(NFCManService) 728
45.5.1 与NFCMan交互(Socket方式) 728
45.5.2 与ANFCMan交互(广播方式) 732
45.6 客户端Library(ANFCMan) 733
45.6.1 ANFCMan的数据结构和异常类 733
45.6.2 ANFCMan的入口类 734
45.6.3 模拟检测到NFC标签的广播接收器 734
45.6.4 同时处理物理NFC标签和虚拟NFC标签的窗口 735
45.7 测试ANFCMan(TestANFCMan) 738
45.8 小结 739
作者介绍
文摘
序言
我一直在寻找一本能够真正帮助我理解 Android 开发“本质”的书籍,而不是仅仅停留在API的表面。《Android开发指南(第二版》这本书,可以说是完全满足了我的需求。它不仅仅是教你如何调用API,更重要的是,它能够让你深入理解 Android 的运行机制和设计理念。这本书在讲解 Android 的 UI 渲染机制的时候,简直就是一次“开光”之旅。它把 View 的绘制过程,从 Measure、Layout 到 Draw,都做了非常细致的讲解,并且配以大量的图示,让我能够清晰地看到每一个像素是如何被渲染到屏幕上的。它还深入讲解了 View 体系的继承关系,以及如何通过自定义 View 来实现各种炫酷的动画效果。我之前一直觉得动画是很难的东西,但看了这本书之后,我才明白,很多动画效果都可以通过理解 View 的绘制过程来实现。它还花了很大篇幅讲解了 Android 的事件分发机制。这对于处理用户交互,比如点击、滑动等,是至关重要的。它详细解释了事件分发的三个阶段:Action Down、Action Move、Action Up,以及 View 之间的事件传递过程。这让我能够更准确地控制用户交互,避免一些不必要的冲突。我之前写的应用,经常会出现点击事件被拦截,或者某个 View 响应了两次点击的问题,现在我明白,很多时候都是因为对事件分发机制理解不够深入。这本书还深入探讨了 Android 的资源管理。这对于开发一款多语言、多屏幕适配的应用来说,是必不可少的知识。它详细讲解了字符串资源、图片资源、布局资源、颜色资源等各种资源的组织方式,以及如何通过不同的限定符来实现多分辨率、多语言的适配。这让我能够写出更具通用性的应用。
评分当我拿到《Android开发指南(第二版》这本书的时候,我其实是抱着一种“试一试”的心态,毕竟市面上的 Android 开发书籍琳琅满目,要找到一本真正能够“触及灵魂”的,太难了。然而,这本书完全颠覆了我的想法。它不仅仅是一本技术手册,更像是一位睿智的导师,在我迷茫的时候,为我指引方向。这本书在讲解 Android 的网络通信部分的时候,简直是让我“眼前一亮”。它不仅仅是教你如何使用 HttpURLConnection 或者 OkHttp,更重要的是,它能够让你深入理解 HTTP 协议的原理,以及 RESTful API 的设计理念。它详细介绍了请求方法、响应状态码、请求头、请求体等概念,并且通过大量的示例,让你能够理解如何构建一个高效、可靠的网络请求。它还深入讲解了 JSON、XML 等数据格式的解析,以及如何使用 Gson、Jackson 等库来方便地处理这些数据。这让我能够写出更健壮、更具有扩展性的网络通信模块。我之前写的应用,在处理网络请求的时候,总是遇到各种问题,比如超时、解析错误、数据不一致等等,现在我明白,很多时候都是因为对 HTTP 协议理解不够深入。这本书还深入探讨了 Android 的后台服务和消息推送。这对于开发一款需要实时更新,或者需要和服务器保持通信的应用来说,是至关重要的。它详细介绍了 Service 的生命周期,前台服务和后台服务的区别,以及如何使用 JobScheduler、WorkManager 来进行更智能的后台任务调度。对于消息推送,它不仅讲解了 FCM (Firebase Cloud Messaging) 的使用,还深入分析了广播的传播机制和广播接收者之间的优先级问题。这让我能够写出更稳定、更高效的后台服务和消息推送。
评分这本书简直就是为我这种“动手能力强,但理论基础薄弱”的开发者量身定做的!《Android开发指南(第二版)》这本书,我得说,它就像一个宝藏,每一次翻阅都能挖掘出新的知识点,让我受益匪浅。我最开始是被它里面丰富的案例吸引的。不同于其他书籍那种“Hello World”级别的例子,这本书的案例都非常贴近实际开发需求,比如一个社交App的动态展示,一个电商App的商品列表和详情页,甚至是更复杂的地图应用和后台服务。它不仅仅是给你看代码,更重要的是,它会把每个案例的实现思路、技术选型、以及关键点的代码实现都讲解得非常透彻。我印象最深刻的是,在讲到列表展示的时候,它不仅讲解了 RecyclerView 的基础用法,还深入探讨了 DiffUtil、ItemAnimator 等高级特性,让我能够构建出流畅、高效的列表。对于那些想要快速提升实战能力的开发者来说,这本书绝对是首选。而且,它对 Android 的架构模式也做了深入的讲解,比如 MVP、MVVM,甚至还涉及了 Jetpack 组件的运用。这让我意识到,写出能运行的代码是基础,但写出易于维护、易于扩展的代码才是关键。它不仅仅是教我“怎么做”,更重要的是教我“为什么要这么做”,让我能够从更深层次理解 Android 开发的精髓。我之前写的项目,虽然功能上也能实现,但维护起来非常痛苦,修改一个地方可能就会牵连很多其他地方。看了这本书之后,我开始尝试使用 Jetpack 的 Architecture Components,比如 ViewModel 和 LiveData,这让我的代码结构变得更加清晰,也更容易进行单元测试。它对一些比较新的技术,比如 Kotlin Flow 和 Jetpack Compose 也有涉及,虽然只是初步介绍,但已经让我看到了未来 Android 开发的趋势,激发了我进一步学习的兴趣。这本书的内容非常扎实,每一章都干货满满,让我感觉每一次阅读都是一次知识的积累和能力的提升。
评分我必须承认,《Android开发指南(第二版》这本书,在很多方面都超出了我的预期。它不仅仅是一本“怎么做”的指南,更像是一本“为什么这么做”的哲学书。它让我从一个“码农”变成了一个对 Android 开发有更深理解的“工程师”。这本书在讲解 Android 的进程和线程安全问题的时候,真的是让我醍醐灌顶。我之前总是对多线程编程感到头疼,各种同步、互斥、死锁问题层出不穷。这本书把这些概念都讲得非常清晰,并且通过大量的实际案例,让我能够理解在什么情况下会出现这些问题,以及如何避免它们。它详细介绍了 synchronized 关键字、Lock 接口、volatile 关键字等并发编程的常用工具,并且深入讲解了原子操作和 CAS 操作。这让我能够写出更健壮、更安全的并发程序。我之前写的应用,经常会出现数据不一致、或者崩溃的问题,现在我明白,很多时候都是因为对并发编程的理解不够深入。这本书还深入探讨了 Android 的内存泄漏和性能优化。这对于开发一款稳定、流畅的应用来说,是至关重要的。它详细介绍了内存泄漏的常见原因,比如 Activity 泄漏、Context 泄漏、静态变量持有对象等,并且提供了多种检测和预防的方法,比如使用 LeakCanary、Android Profiler 等工具。这让我能够写出更高效、更不容易崩溃的应用。我之前写的应用,运行一段时间就会变得卡顿,现在我明白,很多时候都是因为存在内存泄漏或者性能瓶颈。这本书的内容非常扎实,每一章都干货满满,让我感觉每一次阅读都是一次知识的升华。
评分天呐,我最近真的是被这本书彻底征服了!《Android开发指南(第二版)》,我得说,这书名就已经足够吸引人了,但真正翻开之后,我才意识到它的价值远超我的想象。作为一名正在摸索 Android 开发的菜鸟,我之前看过的教程要么过于理论,要么就是简单粗暴地罗列代码,根本没法形成一个系统的认知。而这本书,简直就像是我的“点石成金”秘籍。它从最基础的环境搭建讲起,那种循序渐进的节奏,让我这个完全零基础的人也能稳稳跟上。最让我惊艳的是,它并没有把所有东西一股脑地灌输给你,而是通过大量的实例,手把手地教你如何一步步构建一个功能完整的应用。我记得我刚开始接触 Fragment 的时候,真是头大,各种生命周期回调、参数传递,感觉像在解一道高数题。但这本书里,它用了一个非常生动的案例,把 Fragment 的概念讲得透透的,从嵌套到通信,再到 ViewPager 的应用,一步步拆解,让我茅塞顿开。而且,它不仅仅是教你怎么写代码,更重要的是,它会告诉你“为什么”要这么写。比如,在讲到内存管理的时候,它不会只是简单地说“要释放资源”,而是会深入讲解 Android 的内存回收机制,以及我们应该如何避免内存泄漏,这一点对于写出健壮、高效的应用来说至关重要。我之前写的一些测试小项目,总是跑着跑着就卡顿,或者莫名其妙地崩溃,现在回想起来,很多都是因为对内存管理理解不到位。这本书就像在我脑海里点亮了一盏明灯,让我从“知其然”迈向了“知其所以然”。我尤其喜欢它关于UI设计的讲解,不仅仅是布局文件怎么写,还包括了如何利用 ConstraintLayout 实现响应式布局,以及如何自定义View来达到各种酷炫的效果。它给出的建议非常实用,不会让你陷入无休止的细节纠结,而是教你掌握核心的原理和技巧,让你能够举一反三。读这本书,我感觉自己不再是那个只会复制粘贴代码的“代码搬运工”,而是真正开始理解 Android 开发的精髓,能够独立思考,创造属于自己的应用了。这种成就感,真的太棒了!
评分老实说,我之前对 Android 开发的理解一直停留在“拼凑代码”的阶段,总觉得自己像是站在巨人的肩膀上,但却不知道那些巨人的肩膀是怎么建成的。《Android开发指南(第二版》这本书,彻底改变了我的认知。它不仅仅是一本技术书籍,更像是一本“内功心法”秘籍,它教会我如何去构建一个稳固的“内功”基础,让我能够更从容地应对各种开发挑战。这本书在讲解 Activity 和 Fragment 生命周期的时候,真的是入木三分。它不仅仅是列出那些各种状态的回调函数,更重要的是,它通过图示和大量的比喻,把这些生命周期之间的切换关系讲得清清楚楚,让我能够理解为什么在某个生命周期阶段应该做哪些操作,而不能做哪些操作。这对于避免很多潜在的 bug,比如内存泄漏、UI 状态丢失等等,起到了至关重要的作用。我之前总是遇到应用在后台切换回来的时候,界面显示异常,或者数据丢失,现在我明白了,很多时候就是因为对 Activity 生命周期理解不够深入。这本书还花了很大篇幅讲解了 Android 的线程模型和进程管理。这对于开发一些需要长时间运行的任务,或者需要和后台服务交互的应用来说,是必不可少的知识。它详细介绍了 Handler、Looper、MessageQueue 的工作原理,以及如何使用 ThreadPoolExecutor 来管理线程池,这让我能够写出更高效、更稳定的多线程程序。我特别喜欢它关于进程间通信(IPC)的讲解,比如 Binder、AIDL 等,这些在开发大型应用,或者需要和其他应用交互时,是绕不开的技术。它把这些复杂的概念讲得非常形象,让我能够很快理解其核心原理。这本书的内容非常系统,它构建了一个完整的 Android 开发知识体系,从底层原理到上层应用,都做了深入浅出的讲解。我感觉自己不再是一个零散知识点的学习者,而是一个能够构建完整知识体系的开发者了。
评分我一直认为,一本好的技术书籍,不应该仅仅是告诉你“怎么做”,更重要的是,它应该能够引导你“思考”,《Android开发指南(第二版》这本书,恰恰做到了这一点。它不仅仅是罗列代码,更重要的是,它能够让你理解代码背后的逻辑和原理,从而让你能够独立思考,解决问题。这本书在讲解 Android 的权限系统的时候,真的是让我茅塞顿开。我之前总是觉得 Android 的权限管理很麻烦,各种权限申请,用户不授权就没法正常运行。这本书把 Android 的权限模型讲得非常透彻,从运行时权限的申请、处理,到自定义权限的定义,再到权限组的概念,都做了非常详细的讲解。它还教我如何设计更友好的权限申请流程,如何处理用户拒绝授权的情况,以及如何避免一些潜在的安全风险。这对于开发一款安全、可靠的应用来说,是至关重要的。我之前写的应用,对用户权限的处理总是很粗暴,要么全申请,要么就不处理,现在我知道这样是不对的。这本书还深入探讨了 Android 的后台服务和广播接收者。这对于开发一些需要后台运行,或者需要响应系统事件的应用来说,是必不可少的知识。它详细讲解了 Service 的生命周期,前台服务和后台服务的区别,以及如何使用 JobScheduler、WorkManager 来进行更智能的后台任务调度。对于广播接收者,它不仅讲解了静态注册和动态注册的用法,还深入分析了广播的传播机制和广播接收者之间的优先级问题。这让我能够写出更稳定、更高效的后台服务和广播接收者。这本书的讲解风格非常独特,它不会生硬地灌输知识,而是通过大量的案例和比喻,让你在潜移默化中掌握知识。我感觉自己不再是那个被动接受知识的学生,而是一个主动探索、主动学习的开发者。
评分我必须坦诚地说,一开始拿到《Android开发指南(第二版》的时候,我其实是抱着一种“再看看吧,反正也不贵”的心态。毕竟,市面上关于 Android 开发的书籍已经多如牛毛,要找到一本真正能够让我眼前一亮的,真的很难。然而,这本书完全颠覆了我的预期,它给我带来的惊喜,简直是层出不穷。它的内容组织非常合理,从入门到进阶,过渡得非常自然,不会让你觉得哪个部分突然变得难以理解。我特别欣赏它在讲解异步操作和网络请求这部分的内容。以前我一听到“多线程”、“回调”就头疼,感觉那是高深莫测的东西。但这本书用了一个非常形象的比喻,把这些复杂的概念解释得浅显易懂。它详细介绍了 AsyncTask、Handler、Thread 的使用场景和注意事项,甚至还深入讲解了 RxJava 和 Coroutines,这些我之前觉得遥不可及的技术,现在在我看来,也变得亲切起来。它不仅告诉你怎么用,更重要的是告诉你什么时候用,为什么这么用,这样才能写出高性能、高并发的应用。我记得书里讲到数据存储的时候,它把 SharedPreferences、SQLite、Room、File 存储都做了详细的对比和讲解,分析了各自的优缺点,以及适用的场景。这让我能够根据不同的需求,选择最合适的数据存储方案,而不再是凭感觉随意选择。它还花了不少篇幅讲解了 Android 的性能优化,这一点对我来说是救命稻草。我之前写的应用,用户反馈说有时候会卡顿,我一直找不到原因。看了这本书之后,我才明白很多时候是布局层级太深、或者是不当的资源加载方式造成的。它给出了很多实用的技巧,比如如何使用 Profile 来分析性能瓶颈,如何避免不必要的 View 重绘,如何合理地使用缓存等等,这些都是我之前完全没有意识到的。现在,我正在尝试将这些技巧应用到我的项目中,效果真的非常显著。这本书不仅仅是一本技术手册,它更像是一位经验丰富的导师,在默默地指导着我前进的方向。我感觉自己的编程思维都得到了升华,能够更宏观地看待问题,更有效地解决问题。
评分老实说,在遇到《Android开发指南(第二版》这本书之前,我对 Android 开发的理解一直像是“盲人摸象”,只看到其中的一个部分,却无法形成一个完整的概念。《Android开发指南(第二版》这本书,就像是一位经验丰富的向导,带领我一步步走出了迷雾,让我看到了 Android 开发的全貌。这本书在讲解 Android 的应用组件化和模块化开发的时候,真的是让我“大开眼界”。它不仅仅是告诉你如何划分组件,更重要的是,它能够让你理解组件化和模块化的优势,以及如何设计一个可扩展、可维护的组件化架构。它详细介绍了 Activity、Fragment、Service、BroadcastReceiver 等组件之间的通信方式,以及如何通过路由、事件总线等机制来实现组件之间的解耦。它还深入讲解了 ARouter、EventBus 等流行的组件化框架,并分析了它们的优缺点。这让我能够构建出更灵活、更易于维护的大型应用。我之前写的应用,随着功能的增加,代码越来越难以管理,修改一个地方可能就会影响到很多其他地方,现在我明白,组件化和模块化开发是解决这个问题的关键。这本书还深入探讨了 Android 的性能监控和调试技巧。这对于开发一款稳定、流畅的应用来说,是至关重要的。它详细介绍了 Android Profiler 的各种功能,比如 CPU Profiler、Memory Profiler、Network Profiler 等,并且教会我如何利用这些工具来发现和解决性能瓶颈。它还深入讲解了 Logcat 的使用技巧,以及如何通过断点调试来快速定位和修复 bug。这让我能够更高效地进行应用的开发和调试。
评分我一直认为,一本好的技术书籍,应该能够让你“举一反三”,而不是仅仅停留在“照葫芦画瓢”的层面。《Android开发指南(第二版》这本书,恰恰做到了这一点。它不仅仅是教你如何调用 API,更重要的是,它能够让你深入理解 Android 的设计理念和运行机制,从而让你能够独立思考,创造出更优秀的解决方案。这本书在讲解 Android 的数据库操作的时候,简直是让我“豁然开朗”。它不仅仅是教你如何使用 SQLiteOpenHelper,更重要的是,它能够让你深入理解数据库的设计原理,以及如何通过 Room Persistence Library 来简化数据库操作。它详细介绍了表结构的设计、SQL 语句的编写、以及数据的增删改查等操作。它还深入讲解了数据库的事务、索引、以及如何进行数据库的迁移。这让我能够写出更高效、更可靠的数据库操作。我之前写的应用,在处理数据库的时候,总是遇到各种性能问题,比如查询速度慢、数据量大导致崩溃等等,现在我明白,很多时候都是因为对数据库的设计和优化理解不够深入。这本书还深入探讨了 Android 的文件存储和缓存机制。这对于开发一款需要本地存储大量数据,或者需要提高应用性能的应用来说,是至关重要的。它详细介绍了内部存储、外部存储、以及 ContentProvider 的使用,并且深入分析了 SharedPreferences、SQLite、Room 等不同存储方式的优缺点。这让我能够根据不同的需求,选择最合适的数据存储方案。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有