The Busy Coder's Guide to Android Development (Sample Edition)

需积分: 9 5 下载量 42 浏览量 更新于2024-08-01 收藏 3.19MB PDF 举报
"Android.2_1.sampler.pdf" 《Android开发高手指南》是Mark L. Murphy(也称为 CommonsWare)撰写的一本关于Android应用程序开发的专业书籍。这本书的样本版提供了对完整版的一个预览,而完整版可以在http://commonsware.com/Android/找到。该书覆盖了Android开发的关键知识点,旨在帮助开发者深入了解Android平台。 本书的样本版虽然不包含全部内容,但仍能展示作者对Android开发的深入理解和实践经验。书中可能涵盖了以下几个主要的Android开发主题: 1. **环境搭建**:如何设置开发环境,包括安装Android Studio、配置SDK、AVD管理器以及构建工具的使用。 2. **基本概念**:介绍Android应用的基本结构,如Activity、Intent、Broadcast Receiver、Service和Content Provider等组件的工作原理。 3. **UI设计**:讲解如何使用XML布局文件创建用户界面,包括控件的使用、布局管理器以及自定义视图。 4. **数据存储**:讨论Android中的数据持久化方法,如SQLite数据库、SharedPreferences、文件系统存储以及网络存储。 5. **多线程与异步处理**:介绍如何在Android中进行后台操作,如使用AsyncTask、Handler、IntentService以及线程池。 6. **网络通信**:讲解HTTP通信、WebSocket、JSON解析以及使用Volley、Retrofit等网络库进行数据交换。 7. **权限管理**:阐述Android的权限模型,如何在Manifest文件中声明权限以及运行时权限的处理。 8. **通知与消息推送**:介绍如何使用Notification API创建通知,以及实现远程推送消息。 9. **性能优化**:提供有关内存管理、UI流畅性、APK大小优化等方面的策略。 10. **测试与调试**:涵盖单元测试、UI测试、 Espresso测试框架的使用,以及如何利用Android Studio的调试工具。 11. **版本兼容**:讲解如何处理API级别的差异,使用Support Library或AndroidX库来实现向后兼容。 12. **最新特性**:可能涉及当时Android 2.1版本的新特性和最佳实践。 此书对于初学者和经验丰富的开发者都是宝贵的资源,它不仅解释了Android开发的基础知识,还提供了实用的技巧和最佳实践,帮助读者提高开发效率和应用质量。尽管样本版没有包含所有章节,但它足以激发读者对完整版的兴趣,以获取更全面的Android开发知识。

0. Metadata/Provenance study.set_user_attr('pykeen_version', get_version()) study.set_user_attr('pykeen_git_hash', get_git_hash()) # 1. Dataset # FIXME difference between dataset class and string # FIXME how to handle if dataset or factories were set? Should have been # part of https://github.com/mali-git/POEM_develop/pull/483 study.set_user_attr('dataset', dataset) # 2. Model model: Type[Model] = get_model_cls(model) study.set_user_attr('model', normalize_string(model.__name__)) logger.info(f'Using model: {model}') # 3. Loss loss: Type[Loss] = model.loss_default if loss is None else get_loss_cls(loss) study.set_user_attr('loss', normalize_string(loss.__name__, suffix=_LOSS_SUFFIX)) logger.info(f'Using loss: {loss}') # 4. Regularizer regularizer: Type[Regularizer] = ( model.regularizer_default if regularizer is None else get_regularizer_cls(regularizer) ) study.set_user_attr('regularizer', regularizer.get_normalized_name()) logger.info(f'Using regularizer: {regularizer}') # 5. Optimizer optimizer: Type[Optimizer] = get_optimizer_cls(optimizer) study.set_user_attr('optimizer', normalize_string(optimizer.__name__)) logger.info(f'Using optimizer: {optimizer}') # 6. Training Loop training_loop: Type[TrainingLoop] = get_training_loop_cls(training_loop) study.set_user_attr('training_loop', training_loop.get_normalized_name()) logger.info(f'Using training loop: {training_loop}') if training_loop is SLCWATrainingLoop: negative_sampler: Optional[Type[NegativeSampler]] = get_negative_sampler_cls(negative_sampler) study.set_user_attr('negative_sampler', negative_sampler.get_normalized_name()) logger.info(f'Using negative sampler: {negative_sampler}') else: negative_sampler: Optional[Type[NegativeSampler]] = None # 7. Training stopper: Type[Stopper] = get_stopper_cls(stopper) if stopper is EarlyStopper and training_kwargs_ranges and 'epochs' in training_kwargs_ranges: raise ValueError('can not use early stopping while optimizing epochs') # 8. Evaluation evaluator: Type[Evaluator] = get_evaluator_cls(evaluator) study.set_user_attr('evaluator', evaluator.get_normalized_name()) logger.info(f'Using evaluator: {evaluator}') if metric is None: metric = 'adjusted_mean_rank' study.set_user_attr('metric', metric) logger.info(f'Attempting to {direction} {metric}')解释

2023-06-08 上传