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 的使用

參考資料

相關文章
相關標籤/搜索