20172302 《程序设计与数据结构》第十一周学习总结
2018年学习总结博客总目录:[第一周](http://www.cnblogs.com/hzy0628/p/8539037.html) [第二周](http://www.cnblogs.com/hzy0628/p/8584976.html) [第三周](http://www.cnblogs.com/hzy0628/p/8642935.html) [第四周](http://www.cnblogs.com/hzy0628/p/8671888.html) [第五周](http://www.cnblogs.com/hzy0628/p/8746606.html) [第六周](http://www.cnblogs.com/hzy0628/p/8830819.html) [第七周](http://www.cnblogs.com/hzy0628/p/8870071.html) [第八周](http://www.cnblogs.com/hzy0628/p/8940111.html) [第九周](http://www.cnblogs.com/hzy0628/p/9027708.html) [第十周](http://www.cnblogs.com/hzy0628/p/9059757.html) [第十一周](https://www.cnblogs.com/hzy0628/p/9113709.html)
教材学习内容总结
第二十三章 Android简介
-
1.概览:Android发展介绍:Android 操作系统是一种多用户的Linux系统,它使用Java作为编程语言。Anroid4.4之前,其应用程序在Dalvik的虚拟机上运行,Android5.0及以后版本,其源代码使用ART(Android RunTime)来执行。Android4.4是Dalvik和ART的转折点和分水岭。
APK表示应用程序包,它是一个基本的zip文件,可使用unzip或Winzip来解压缩。apk文件可以在一台物理设备或模拟器上运行,部署一个Android应用程序很容易。 -
2.应用程序开发简介:
4种Android应用程序组件- (1)活动(Activity):包含用户交互组件的一个窗口。
- (2)服务(Service):在后台长时间运行的操作。
- (3)广播接收者(Broadcast receiver):一个监听器,负责对系统或应用程序声明做出响应。
- (4)内容提供者(Content provider):管理要和其他应用程序分享的一组数据的一个组件。
Android编程中另一重要概念是意图(intent):一条消息,发送给系统或另一个应用程序,以要求执行一个动作。
每个应用程序必须有一个清单(manifest),以描述该应用程序,清单以XML文件的形式给出,具体内容结构见下面阐述。
- 3.Android版本及API对应表
第二十四章 初始Android
-
集成开发环境(IDE),这里讲使用Android stutio这款IDE软件,这里讲述的其的下载安装及配置以及创建一个应用程序,这里将不再进行讲述。
-
应用程序结构:Project窗口包括两个主要的节点:app和Gradle Scripts。app节点包含了应用程序中所有的组件。Gradle Scripts节点包含Gradle构建脚本,以供构建Android项目。
app节点下包含如下3个节点:-
(1)manifests,其中包含了AndroidManifest.xml。这是一个控制文件,用来描述应用程序。不同的参数表示不同的含义,例如“manifest”为根节点,描述了package中的所有内容;“application”元素可以包含application的一些全局和默认的属性,如标签、icon、主题等等;“activity”是与用户交互的主要工具,通常包含一个或多个activity元素,描述App中的各种活动。这一点在后面的任务中还有体现。
-
(2)java:包含了所有Java应用程序和测试类。
-
(3)res:存放了应用程序使用到的各种资源,如xml界面文件、图片、数据等。通常包含drawable子目录、layout子目录、values子目录三个。drawable:存放分辨率不同的图片。layout:存放xml界面布局文件,主要用于显示用户操作界面。values:存放不同类型的数据,如string、array等。
-
-
特殊说明(R类):R类的作用是让你能够引用代码中的一个资源。
1)layout下中的andoid:id、android:text等资源信息等
2)string对应的字段是res/values/strings.xml中的配置项信息(自动生成的,不需要认为的修改R类,包含id也一样)。
3)@color查找颜色:color对应的字段是res/values/colors.xml中的配置项信息(自动生成的,不需要认为的修改R类,包含id也一样)。
4)@drawable查找图片:只需要把png/jpeg/gif文件拷贝到新建的/res/drawable目录下,或者拷贝到工程新建的默认drawable-xx目录下
5)@dimen某个组件尺寸定义:需要在res/values/目录下新建一个dimen.xml文件.
-
apk文件:APK是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
-
调试应用程序:设置断点,并通过Run > Debug app 调试程序。
-
Android SDK及创建虚拟设备以及物理设备的连接都已实践,不再将其流程。
第二十五章 活动
-
1.活动的含义:活动是包含了用户界面组件的一个窗口,用户可以和这些用户界面组件交互,启动一个活动,往往意味着要显示一个窗口。一个典型的Android应用程序,都是从启动一个活动开始的,也就是说启动一个活动就意味着显示一个窗口。
-
2.主活动:应用程序所创建的第一个窗口,叫做主活动(main activity),它充当应用程序的入口点。要让一个活动成为一个主活动,其intent-filter元素必须包含MAIN的action和LAUNCHER的category。
-
3.活动的声明周期:
- (1)onCreate
- (2)onStart
- (3)onRusume
- (4)onPause
- (5)onStop
- (6)onStop
- (7)onRestart
- (8)onDestroy
-
4.修改应用程序图标
- 在res/drawable中保存jepg文件或者png文件,png首选,其支持透明度。
- 编辑清单文件manifests的android:icon属性,以指向新的图像,可以使用如下格式修改引用图像文件:@drawable/filename,其中,filename不带扩展名的文件名称。
- 注意,文件名称首位必须是英文字母,不可以是数字。
-
5.使用Android资源
Android内容很丰富,它带有大量的资源可供使用。要浏览可用资源,在Android stutio打开应用程序清单,输入“@Android:”,后面跟着Ctrl+space组合键,从而填入属性值,便会显示出资源的列表。 -
6.启动另一活动
用户从主屏幕选择APP图标时,祝活动通过系统自身而启动,再拥有多个活动的应用程序中,很有可能需要启动另一活动,这时便可以通过调用startActivity方法直接做到。如startActivity(intent)
,其中intent是Android.content.Intent类的一个实例。
@Override
public boolean onTouch(View arg0, MotionEvent event) {
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("message", "Message from First Screen");
startActivity(intent);
return true;
}
这一实践已在实验过程中完成,这里不在进行重复。
-
7.活动相关的意图
通过传递给意图一个活动类而构造的意图,叫做显式意图。也可以创作一个隐式意图,在这种情况下我们没有指定一个意图类,相反,我们给Intent类的构造方法传递一个动作,让系统来决定启动哪一活动,如果有多个活动可以处理,系统会让用户来进行选择。- 启动一个活动的意图动作
- 启动一个活动的意图动作
第二十六章 UI组件
-
1.Android SDK提供了叫作微件(widget)的众多简单的和复杂的组件。微件有很多例子,比如按钮、文本字段、进度条等。此外,还需选择一个布局来放置UI组件。微件和布局,都在android.view.View里实现。
-
2.使用Android Stutio UI工具
- 这个操作很容易实现,只需打开一个活动的布局文件,并将其拖拽到布局上即可。活动的布局文件位于应用程序的res/layout目录中。
- 工具窗口分为三个:左边是微件,分别为Layout、Widgets、Text Fields和Containers等不同种类。每个微件和布局都有一组属性,这些属性派生自View类或者添加到实现类。
- 使用UI工具所做的事,都会反应到布局文件中去,以XML元素的形式体现出来。
-
3.Toast
- Toast是一个小的弹出对话框,用于显示一条消息作为给用户的反馈。Toast并不会代替当前的活动,并且只是占据了一条消息那么大的空间。
- android.widget.Toast是创建Toast的模板。
- 和Toast相似,AlertDialog也是一个为用户提供反馈的窗口。Toast能淡出自己,而AlertDialog会一直显示,直到其失去焦点。
-
4.通知
- 通知是出现在状态栏里的一条消息,和Toast不同,通知是持久的,并且将保持显示,直到关闭它或者是关闭设备。
- 创建通知:
NSNotification *notification = [NSNotificationnotificationWithName:@"refresh" object:niluserInfo:dictplist];
- 通过通知中心发送通知:
[[NSNotificationCenter defaultCenter] postNotification:notification];
- 接收通知
(void)refresh:(NSNotification *)text
{
NSLog(@"%@",text.userInfo);
self.dic = [[NSMutableDictionary alloc] initWithDictionary:text.userInfo];
NSLog(@"-----接收到通知------");
[self.leftTableView reloadData];
[self.rightTableView reloadData];
}
教材学习中的问题和解决过程
-
问题1:关于XML文件的具体的用法及各项的含义
-
问题1解决方案:查找相关资料内容,对书上的XML的内容进行了一些拓展补充,参见下面:
XML文件结构:
<?xmlversion="1.0"encoding="utf-8"?>
<manifest>
<application>
<activity>
<intent-filter>
<action/>
<category/>
</intent-filter>
</activity>
<activity-alias>
<intent-filter></intent-filter>
<meta-data/>
</activity-alias>
<service>
<intent-filter></intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter></intent-filter>
<meta-data/>
</receiver>
<provider>
<grant-uri-permission/>
<meta-data/>
</provider>
<uses-library/>
</application>
<uses-permission/>
<permission/>
<permission-tree/>
<permission-group/>
<instrumentation/>
<uses-sdk/>
<uses-configuration/>
<uses-feature/>
<supports-screens/>
</manifest>
结构分析:
-
1、第一层(Manifest):(属性)
- A、xmlns:android 定义android命名空间
- B、package 指定本应用内java主程序包的包名
- C、sharedUserId 表明数据权限
- D、sharedUserLabel 一个共享的用户名
- E、versionCode 是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次
- F、versionName 这个名称是给用户看的,你可以将你的APP版本号设置为1.1版
- G、installLocation 安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal
-
2、第二层(Application):属性
- A、android:allowClearUserData('true' or 'false') 用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。
- B、android:allowTaskReparenting('true' or 'false')是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务
- C、android:backupAgent 这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase
- D、android:debuggable 这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。
..............
-
3、第三层(Activity):属性
-
4、第四层(intent-filter)
-
5、第四层(meta-data)
-
6、第三层(activity-alias)属性
-
7、第三层(service)
-
8、第三层(receiver)
-
9、第三层(provider)属性
-
10、第三层(uses-library)
-
11、第一层(supports-screens)
-
12、第二层(uses-configuration )与(uses-feature)性能都差不多
-
13、第二层(uses-sdk )
-
14、第二层(instrumentation )
-
15、(permission)、(uses-permission)、(permission-tree )、(permission-group )区别~
-
问题2:活动的生命周期的具体流程,书上的讲解能够理解,但书上的活动流程不齐全,而且不够简练。
-
问题2解决方案:下面的表格对每个方法更详细的描述和在活动的整个生命周期中的定位。
这七个方法定义了活动的整个生命周期。有三个嵌套的循环,你可以通过这七个方法监视:
活动的整个生命时间,从第一次调用onCreate()开始直到调用onDestroy()结束。一个活动在onCreate()中做所有的“全局”状态的初始设置,在onDestroy()中释放所有保留的资源。举例来说,有一个线程运行在后台从网络上下载数据,它可能会在onCreate()中创建线程,在onDestroy()中结束线程。
活动的可视生命时间,从调用onStart()到相应的调用onStop() 。在这期间,用户可以在屏幕上看见活动,虽然它可能不是运行在前台且与用户交互。在这两个方法之间,你可以保持显示活动所需要的资源。举例来说,你可以在onStart()中注册一个广播接收者监视影响你的UI的改变,在onStop() 中注销。因为活动在可视和隐藏之间来回切换,onStart()和onStop() 可以调用多次。
活动的前台生命时间,从调用onResume()到相应的调用onPause()。在这期间,频繁地在重用和暂停状态转换——例如,当设备进入睡眠状态或一个新的活动启动时调用onPause(),当一个活动返回或一个新的意图被传输时调用onResume()。因此,这两个方法的代码应当是相当轻量级的。
- 参考链接:Android组件声明周期
代码调试中的问题和解决过程
-
问题1:在进行修改应用图标时,插入图片时总是会出现错误,不论是png类型图片或是jpg类型图片,总是出现红线提示错误。
-
问题1解决方案:总是插入失败,后来问王志伟同学,他说的是他的可以改,然后他又帮我试了几次,最后也是能插入了,这里之前出错的原因是图片的名称的首个字符为数字,它要求的必须是英文字母才能进行修改,换了张图片以后就可以改了。
-
问题2:关于打开文件这里的一个问题,就是从网站上下载下来的课本上的代码的导入问题。
-
问题2解决方案:这里参见实验四博客中内容,这也算是书上的内容,也是课本上学习遇到的问题,关于这里修改了很久才改出来的。博客链接:20172302 实验四Android程序设计实验报告
代码托管
上周考试错题总结
-
1.A collection in the items stored there are of different types is referred to as a(n) ________ type.
A . homogeneous
B . heterogeneous
C . dynamic
D . abstract
E . vector -
解析:异构这个术语意味着元素是不同的类型。在Java中,类可以存储异构类型,例如一个实例数据可能是int,另一个是String,第三个是double。另一方面,数组是同构类型,因为数组中存储的每个元素都是相同的类型。
-
2.Abstract Data Types have which of the following object-oriented features?
A . information hiding
B . inheritance
C . polymorphism
D . message passing
E . all of the above -
解析:一个抽象的数据类型封装了一个数据结构和处理数据结构的方法,这样信息隐藏就会被保存下来。因此,所有ADT都使用了信息隐藏,因此不能直接从ADT外部操作数据结构,而不需要其他面向对象的特性。
-
3.In a linked list in Java
A . the link is an object
B . the link is a node
C . the link is a reference
D . the link is an int
E . the link is a class -
解析:在链表中,链节是对下一个节点的引用。通过检查引用的内容来“取消引用”链接。节点是对象。对象是类的实例。节点的数据部分很可能是int,以及任何其他类型的数据。
-
4.A simple linear list
A . is an example of a degenerate tree
B . is an example of a degenerate graph
C . is an example of a degenerate digraph
D . cannot be represented as a degenerate tree, graph or digraph
E . none of the above -
解析:一个简单的线性列表被指向,从它的开始节点到它的结束节点。图和有向图都没有起始节点,但是树有:树的根。因此,一个简单的线性列表就是一个退化树的例子,它有一个分支因子为1,每个节点只有一个继承,从根开始,到单叶结束(结束节点)。
-
5.An Abstract Data Type is a data structure, that is, it is the listing of the instance data and the visibility modifiers for those instance data.
A . true
B . false -
解析:抽象数据类型包括抽象数据结构,但也包括访问和操作抽象数据结构的方法。
-
6.A linked list that contains 6 Nodes will have 6 reference pointers.
A . true
B . false -
解析:为了访问链表,至少需要有第7个引用指针,一个引用链表中的第一个项的引用指针。
-
7.Trees and graphs, because they are dynamic in nature, cannot be implemented using Java arrays.
A . true
B . false -
解析:任何给定的有一个固定大小的数组,因此最大电流的大小(节点数)的树或图仅限于其底层数组的大小,可以分配一个更大的数组,将原始数组中的元素复制到新数组,并继续以这种方式实现扩张。这种技术之所以成功,是因为Java数组是对象,访问所有对象的机制是通过引用实现的。在大多数其他语言(如C、c++、c#、Pascal等)中,数组都不是对象,因此这种技术将会失败。
-
8.A bi-directional list is an example of a non-linear data structure.
A . true
B . false -
解析:虽然双向列表在每个节点中都有多个链接,但是当您绘制双向列表的图片时,它仍然是线性的。
-
9.Linux Bash中,使用sudo apt-get upgrade
命令可以更新系统。
A . true
B . false -
10.Linux Bash中,可以使用chomd 777 pdds命令修改文件pdds的权限,并使得其拥有者、拥有者所在的组和其他用户都拥有全部权限。
A . true
B . false -
解析:chmod 777 pdds,不是 chomd 777 pdds ,这道题目没看清楚。
-
11.Linux Bash中,使用apt-get search tree命令来查找是否系统装有软件tree。
A . true
B . false -
解析:应使用
apt-cache search tree
-
12.Linux Bash中,di1和di2是两个已存在的文件夹,则命令mv di1 di2表示将文件di1移动至文件di2内。
A . true
B . false -
解析:网上查到的资料:mv 目录名 目录名 >>目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名.
参考链接:Linux mv命令 -
13.Linux Bash中,查找五天之内src目录中删除的文件的命令是find /src/ -ctime -5。
A . true
B . false -
解析:参考链接:Linux find命令
-
14.Linux Bash中,使用grep查找当前src目录下所有包含main函数的文件,并要求显示出现行号的命令是grep –n main /src
A . true
B . false -
解析:应该使用的是
grep –rn main /src
. -
15.在Ubuntu中,使用vim编辑器时,想要移动光标,除方向键之外,还可以依次使用hjkl键进行上下左右的移动。
A . true
B . false -
解析:上下左右顺序依次是kjhl
-
16.在Linux Bash中,用ls命令查看当前目录下文件并可以显示子目录下文件的参数是-R。
A . true
B . false -
解析:参考链接:Linux ls命令
-
17.在Linux Bash中,man -k命令与apropos命令等价。
A . true
B . false -
解析: 两者等价。
结对及互评
点评过的同学博客和代码
- 本周结对学习情况
-
博客中值得学习的或问题:本周博客总结的比较认真,课本问题记录的很详细精确,可多些对教材内容总结,错题改正也可增加对问题的理解。
-
结对学习内容
共同学习有关Android这一块内容以及Android的实验的进行。
其他(感悟、思考等)
感悟
- 本周学习Android部分内容,很多东西刚开始着手总是感觉很难,力不从心,难以完成,在完成的过程中逐渐掌握基本的内容,再去往深处走,这又是一个困难的过程。目前不知道的是Android是否是只有这一次实验,只进行这两周的学习,其实Android开发我认为是比Java中开发要更有趣一些,因为你做出来的东西是可以产生apk文件,直接就可以安装到手机上进行运行,而这在我们这学期的Java学习中并不会体验到,可能后面做出来的项目也可以做到生成一个软件,但现在还没有接触到。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 157/157 | 1/1 | 15/15 | |
第二周 | 382/539 | 1/2 | 16/31 | |
第三周 | 317/856 | 2/4 | 15/46 | |
第四周 | 996/1852 | 1/5 | 24/70 | |
第五周 | 578/2330 | 1/6 | 16/86 | 这周对上周第七章的学习有了更深的理解 |
第六周 | 475/2805 | 1/7 | 14/100 | 学习了数组方面的相关知识 |
第七周 | 629/3434 | 1/8 | 14/114 | 关于继承有一定认识 |
第八周 | 1567/5001 | 3/11 | 25/141 | |
第九周 | 428/5429 | 2/13 | 17/158 | 了解了递归内容并学习了IO流相关知识 |
第十周 | 893/6322 | 2/15 | 16/174 | 学习集合方面的知识 |
第十一周 | 0/6322 | 3/18 | 25/199 | 了解Android方面内容以及Android Stutio 的使用 |