教材学习内容总结
23章Android简介
- 概览
- Android操作系统是一种多用户的Linux系统,每个应用程序作为一个不同的用户而运行,并和其他的app隔开运行。
- Android使用Java作为编程语言,但它并不会在Java虚拟机上运行,Android原代码最终时用一个叫做ART的新的运行时来编译为机器代码和应用程序。
- APK表示应用程序包,apk文件是一个基本的zip文件,他是一个部署App的方式,只要有该文件的一个版本就可以在自己的Android设备上运行它,apk文件可以在一台物理设备或模拟器上运行。
- 应用程序开发简介
- 开始项目前,确定选择的Android设备,然后要确定要支持哪个版本的Android。
- 4种Android应用程序组件:
- 活动:包含用户交互组件的一个窗口。
- 服务:在后台长时间运行的操作。
- 广播接收者:一个监听器,负责对系统或应用程序声明作出响应。
- 内容提供者:管理要和其他应用程序分享的一组数据的一个组件。
- 意图:意图是一条消息,发送给系统或另一个应用程序,以要求执行一个动作。通常用来启动一个活动或启动一个服务。
- 清单:描述该应用程序,并以XML文件的形式给出。其中包含:
- 运行该应用程序所需要的最小的API Level
- 应用程序的名称
- 触碰该应用程序图标时,打开的第一个活动
- 是否允许其他应用程序调用
- 安装应用程序所保证的许可
- Android版本
- 每一个新的版本都增添新功能,旧的设备不一定能使用新功能,Google提供一个支持库,允许在旧的设备中使用最新的功能。
24章初识Android
- 要开发测试和调试应用程序,需要Android软件开发工具包(SDK)。它包含一个可以测试应用程序的模拟器。
- 还需要一个集成开发环境,以加速开发效率,有了IDE后就可以编写Android应用程序。目前两个可用的IDE:
- Android Studio
- Android Developer Tools(ADT)Bundle
- 找JDK位置:
File>Project Structure>SDK Location
- 应用程序结构
- build:该目录包含了自动生成的文件,这些文件包括了编译设置项、R类等
- src:该目录存放了应用的源代码.java文件。默认情况下,它包含了MainActivity.java文件,这个源代码j有一部分是执行了你点击应用图标时启动应用所需要功能
- manifests:描述应用程序
- java:包含所有Java应用程序和测试类
- res:该目录存放了所有的资源文件
- drawable:该目录存放了项目的drawable对象和一些图片资源
- layout:该目录存放了各个界面的布局文件
- menu:该目录存放了应用中设计的菜单对象
- mipmap:该目录存放了应用的主要图片资源
- values:该目录存放了字符串、颜色等定义的资源集合
- AndroidManifest.xml:是清单文件,该文件是描述应用基础特性的文件,定义每个组件。
- apk文件:为Android应用程序打包。同时可以使程序可以调试
- apk文件结构:
- 调试:
Run
->Debug app
- 设置断点:
Run
->Toggle Line Breakpoint
- 删除支持的库
- 在app的build.gradle文件中,通过删除相应的行,删除对appcompat-v7的依赖
- 保存build.gradle文件
- 在res/values/styles.xml文件中,将
android:Theme.Holo.Light
赋值给parent属性 - 将每一个活动类中的
ActionBarActivity
修改为Activity
,并删除import语句(快捷键Ctrl+Alt+O) - 在所有menu.xml文件中,用
android:showAsAction
替换app:showAsAction
- 选择菜单
Project>Rebuild Project
,重新构建项目
25章活动
- 活动是包含用户界面组件的一个窗口,启动一个活动相当于显示一个窗口。
- 应用程序所创建的第一个窗口,叫做主活动(main Activity),充当程序入口点。主活动必须包含MAIN的action和LAUNCHER的category。
- Activity的生命周期法
- onCreate():这是第一个回调方法。当Activity首次被创建时会调用它
- onStart:当Activity对于用户来说变为可视状态时会回调此方法
- onResume():当用户开始与应用交互时会调用此方法
- onPause():当前的Activity正在暂停中,并且先前的Activity正在恢复时,被暂停的这个Activity不会再接收用户的输入,也不再执行任何代码和调用
- onStop():当Activity不再为可视状态时会调用该回调方法
- onDestroy():该方法会在Activity被系统销毁前被调用
- onRestart():当Activity在被停止后重新启动时,会调用该回调方法
- 修改应用程序图标
- 在res/drawable中保存一个jepg文件或png文件
- 编辑清单文件的android:icon属性,以指向新的图像,使用
@drawable/fileName
- 启动另一个活动
- 从一个活动启动另一个活动,可以通过调用startActivity方法。例如:
startActivity(intent);
(intent是android.content.Intent类的一个实例)
- 从一个活动启动另一个活动,可以通过调用startActivity方法。例如:
- 活动的意图
想要得到调用活动的一个结果,还可以调用startActivityForResult方法。
激活一个活动:Intent intent = new Intent(this, SecondActivity.class); startActivity(intent);
要给调用的活动传递额外的信息,可以通过给意图附加信息来实现。可以通过调用Intent的putExtra方法来做到这一点:
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("message", "Message from First Screen"}; startActivity(intent);
26章UI组件
- 概览
- SDK提供了叫做微件的众多简单的和复杂的组件。
- 组件类型:
- TextView:文本标签,该控件用于显示文本
- EditText:文本框,是预定义好的TextView的一个子类,有富文本编辑能力
- AutoCompleteTextView:自动完成的文本标签,类似于EditText。当用户在输入的时候会自动给出一些完整的建议
- Button:按钮,可以按压、点击,由用户完成一个动作
- ImageButton:图片按钮,顾名思义
- CheckBox:复选框,可以作为用户使用的一个开关。当有一系列可供选择的选项时,建议使用该控件
- ToggleButton:带有一个“灯泡”效果的开关按钮
- RadioButton:单选按钮,只有选中和未选中状态
- RadioGroup:是RadioButton的集合,在同组内只能选中一个单选按钮
- Spinner:下拉列表,允许用户在多个选项中选择一个
- TimePicker:时间选择器,能让用户输入时间,有12小时和24小时模式
- DatePicker:日期选择器,能让用户输入日期
- ProgressBar:进度条,为用户提供某项工作的进度,比如后台正在做的事情
- Toast
- 是一个气泡,到了预先定义的时间以后才会消失。
- 创建Toast实例的两种方法:
public static Toast maketext (android content. Context context, int resourceid, int duration)
public static Toast maketext (android content. Context context java. lang Charsequence text, int duration)
- 在活动类中创建并显示一个Toast:
Toast. maketext (this, "Downloading .",Toast. LENGTH LONG). show()
教材学习中的问题和解决过程
- 问题一:从一开始下载Android Studio就报错,之后总提到的Gradle到底是指什么
问题一解决:
专业解释:
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
较好地解释:
软件开发讲究代码复用,通过复用可以使工程更易维护,代码量更少..... 开发者可以通过继承,组合,函数模块等实现不同程度上的代码复用.但不知你有没有想过,软件开发也是一种工程作业,绝不仅仅是写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理.....),你每天都在build,clean,签名,打包,发布,有没有想过这种过程,也可以像代码一样被描述出来, 也可以被复用.
总结地说:
1、Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.
2、Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能
- 问题二:经常出错的R文件是指什么
问题二解决:android studio的R文件是会自动生成,可以从以下路径查看到: 有时候由于代码中存在错误,R文件是不会自动生成,当修改了错误之后,编译器就会自动生成R文件。要想找到R文件:
1、首先创建一个新的项目,项目的目录如下:
2、在这个项目列表中是没看到R.java文件的,要切换项目列表试图为project。
3、依次,打开
app
-->build
-->generated
-->source
-->r
-->debug
,在debug中的两个选项的子文件中分别有有一个R文件,既就是R.java文件。
代码调试中的问题和解决过程
- 问题一:如何在一个活动里启动另一个活动
- 问题一解决:要启动活动就必须要新建一个Intent类的对象,传递的参数分别是启动活动的语句所在活动的名字和被启动的活动的名字,代码为
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);//启动活动
- 问题二:如何设置一个气泡
- 问题二解决:具体的代码为
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, "*********", Toast.LENGTH_LONG).show();
}
- 问题三:在运行书上相关代码时,R文件变红
问题三解决:在网上查找问题
以前用studio是R文件是不报错的。当你从其他程序拷过一些代码是会发现R文件会变红并且应用程序不能运行。除了R文件其他地方没有报错,只有app运行时会报错 。
这是因为当你从其他程序拷过一些代码。你的r文件中没有自动加载,这时你需要把那些报错的代码删除并重新在android studio中输入,这样你的应用程序就可以运行了。也可以试着用rebuild project
代码托管
无
上周考试错题总结
错题一:
- 错题一解析:抽象数据类型包含一个数据结构和访问数据结构的方法。数组没有方法,而引用变量和原始类型是数据,而不是数据结构。
错题二:
- 错题二解析:抽象数据类型封装了数据结构和操作数据结构的方法,从而保留了信息隐藏。
错题三:
- 错题三解析:我认为是使用链表,就可以扩展,因为他没有固定的容量,但是我理解的题意是错误的,其实是让选需要实现这个方法的,而不是有这个方法的。所以选阵列,他被填满后就需要这样的操作。
错题四:
- 错题四解析:参考解析理解:在链表中,链接是对下一个节点的引用。通过检查参考资料的内容,通过“取消引用”来跟踪链接。节点对象。对象是类的实例。节点的数据部分很可能是int,以及其他类型的数据。
错题五:
- 错题五解析:两者都可以添加元素,但堆栈在顶部添加,队列在后面添加。
错题六:
- 错题六解析:参考错题一,数组是一种数据结构,没有已经实现的操作来执行列表操作。
错题七:
- 错题七解析:参照错题一,如果实例数据被公开,那么就不需要实现操纵这些实例数据的方法,它们可以直接从其他类进行修改。因此,仅仅因为一个类存在并不意味着该类是一个ADT。
错题八:
- 错题八解析:使用man 3 printf命令可以查看C语言中的printf函数的帮助文档。
错题九:
- 错题九解析:没有想到是这样子的错误:题目中拼写错误,应该是chmod 777 pdds
错题十:
- 错题十解析:应该是
apt-cache search tree
错题十一:
- 错题十一解析:我认为是将前者更名为后者,事实上只有后者不存在的时候是更名,题目中明确指出两者都存在,所以是表示文件移动。
错题十二:
- 错题十二解析:应该是
tar –cf dky.tar dky
错题十三:
错题十三解析:应该是
grep –rn main /src
结对及互评
点评:
- 博客中值得学习的或问题:
* 王禹涵的博客在教材知识总结的地方有图表,有图片,总结认真
* 谭鑫的博客在代码中的问题过程记录仔细,感悟很真实自然,对课本内容总结条理清晰 - 基于评分标准,我给谭鑫的博客打分:7分。得分情况如下:
- 错题学习深入的加1分
- 结对学习情况真实可信的加1分
- 问题加分4分
- 感悟不假大空加一分
- 基于评分标准,我给王禹涵的博客打分:10分。得分情况如下:
- 排版精美的加1分
- 有动手写新代码的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 结对学习情况真实可信的加1分
- 问题加分5分
点评过的同学博客和代码
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 200/200 | 2/2 | 20/20 |
第二周 | 300/500 | 2/4 | 18/38 |
第三周 | 500/1000 | 3/7 | 22/60 |
第四周 | 300/1300 | 2/9 | 30/90 |
第五周 | 795/2407 | 1/6 | 30/120 |
第六周 | 1117/2921 | 1/7 | 30/150 |
第七周 | 703/3511 | 1/8 | 40/190 |
第八周 | 1139/4701 | 2/10 | 40/230 |
第九周 | 681/5382 | 2/12 | 40/270 |
第十周 | 1977/7359 | 2/14 | 30/300 |
第十一周 | 0/7359 | 3/17 | 30/330 |
其他
这部分内容很有趣,除了看书的时候一脸懵逼,做实验的时候一脸懵逼...就是没有深入理解,慢慢来吧,最开始学java也是一脸懵逼,时间久了就好了,还是要有信心的,毕竟我是即将会写小程序的人哈哈哈哈✺◟(∗❛ัᴗ❛ั∗)◞✺