20172302 《程序设计与数据结构》第十一周学习总结


2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 第九周 第十周 第十一周
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应用程序很容易。java

  • 2.应用程序开发简介:
    4种Android应用程序组件
    • (1)活动(Activity):包含用户交互组件的一个窗口。
    • (2)服务(Service):在后台长时间运行的操做。
    • (3)广播接收者(Broadcast receiver):一个监听器,负责对系统或应用程序声明作出响应。
    • (4)内容提供者(Content provider):管理要和其余应用程序分享的一组数据的一个组件。

Android编程中另外一重要概念是意图(intent):一条消息,发送给系统或另外一个应用程序,以要求执行一个动做。node

每一个应用程序必须有一个清单(manifest),以描述该应用程序,清单以XML文件的形式给出,具体内容结构见下面阐述。linux

  • 3.Android版本及API对应表

第二十四章 初始Android

  • 集成开发环境(IDE),这里讲使用Android stutio这款IDE软件,这里讲述的其的下载安装及配置以及建立一个应用程序,这里将再也不进行讲述。android

  • 应用程序结构:Project窗口包括两个主要的节点:app和Gradle Scripts。app节点包含了应用程序中全部的组件。Gradle Scripts节点包含Gradle构建脚本,以供构建Android项目。
    app节点下包含以下3个节点:c++

    • (1)manifests,其中包含了AndroidManifest.xml。这是一个控制文件,用来描述应用程序。不一样的参数表示不一样的含义,例如“manifest”为根节点,描述了package中的全部内容;“application”元素能够包含application的一些全局和默认的属性,如标签、icon、主题等等;“activity”是与用户交互的主要工具,一般包含一个或多个activity元素,描述App中的各类活动。这一点在后面的任务中还有体现。编程

    • (2)java:包含了全部Java应用程序和测试类。vim

    • (3)res:存放了应用程序使用到的各类资源,如xml界面文件、图片、数据等。一般包含drawable子目录、layout子目录、values子目录三个。drawable:存放分辨率不一样的图片。layout:存放xml界面布局文件,主要用于显示用户操做界面。values:存放不一样类型的数据,如string、array等。c#

  • 特殊说明(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>

结构分析:

  • 一、第一层(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
  • 二、第二层(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在手机上能够被调试。
      ..............
  • 三、第三层(Activity):属性

  • 四、第四层(intent-filter)

  • 五、第四层(meta-data)

  • 六、第三层(activity-alias)属性

  • 七、第三层(service)

  • 八、第三层(receiver)

  • 九、第三层(provider)属性

  • 十、第三层(uses-library)

  • 十一、第一层(supports-screens)

  • 十二、第二层(uses-configuration )与(uses-feature)性能都差很少

  • 1三、第二层(uses-sdk )

  • 1四、第二层(instrumentation )

  • 1五、(permission)、(uses-permission)、(permission-tree )、(permission-group )区别~

  • 参考连接:Android之AndroidManifest.xml详解

  • 问题2:活动的生命周期的具体流程,书上的讲解可以理解,但书上的活动流程不齐全,并且不够简练。

  • 问题2解决方案:下面的表格对每一个方法更详细的描述和在活动的整个生命周期中的定位。

这七个方法定义了活动的整个生命周期。有三个嵌套的循环,你能够经过这七个方法监视:

活动的整个生命时间,从第一次调用onCreate()开始直到调用onDestroy()结束。一个活动在onCreate()中作全部的“全局”状态的初始设置,在onDestroy()中释放全部保留的资源。举例来讲,有一个线程运行在后台从网络上下载数据,它可能会在onCreate()中建立线程,在onDestroy()中结束线程。 

活动的可视生命时间,从调用onStart()到相应的调用onStop() 。在这期间,用户能够在屏幕上看见活动,虽然它可能不是运行在前台且与用户交互。在这两个方法之间,你能够保持显示活动所须要的资源。举例来讲,你能够在onStart()中注册一个广播接收者监视影响你的UI的改变,在onStop() 中注销。由于活动在可视和隐藏之间来回切换,onStart()和onStop()  能够调用屡次。 

活动的前台生命时间,从调用onResume()到相应的调用onPause()。在这期间,频繁地在重用和暂停状态转换——例如,当设备进入睡眠状态或一个新的活动启动时调用onPause(),当一个活动返回或一个新的意图被传输时调用onResume()。所以,这两个方法的代码应当是至关轻量级的。

代码调试中的问题和解决过程

  • 问题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

  • 解析: 二者等价。

结对及互评

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20172308
    • 博客中值得学习的或问题:本周博客总结的比较认真,课本问题记录的很详细精确,可多些对教材内容总结,错题改正也可增长对问题的理解。

    • 结对学习内容
      共同窗习有关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 的使用

参考资料

相关文章
相关标签/搜索