Android程式入口以及項目文件夾的含義和使用總結—入門

来源:http://www.cnblogs.com/mingjiatang/archive/2016/10/19/5978538.html
-Advertisement-
Play Games

新接觸一門程式或者開發框架,我一般都要先弄清楚程式的入口在哪裡,程式怎麼運行的;建立一個項目後,各個文件夾有什麼作用以及如何使用等等。理清楚這些東西對以後開發是很有好處的,古話說得好,工欲善其事,必先利其器。本文主要總結android程式的入口點和程式的運行流程(初識),android項目中各文件夾 ...


新接觸一門程式或者開發框架,我一般都要先弄清楚程式的入口在哪裡,程式怎麼運行的;建立一個項目後,各個文件夾有什麼作用以及如何使用等等。理清楚這些東西對以後開發是很有好處的,古話說得好,工欲善其事,必先利其器。本文主要總結android程式的入口點和程式的運行流程(初識),android項目中各文件夾的含義,以及它們的使用。

剛接觸android程式,配置好開發andriod的環境,建立一個項目,框架自帶的經典hello程式,然後就可以在虛擬設備上進行運行了。但是對程式從哪裡開始運行的,下一步應該執行哪個函數,以及各個項目文件夾乾什麼的,裡面存儲什麼,都有什麼作用等等這些都是一臉懵逼的。經過這幾天的摸索,對這些概念有那麼一點點理解,下麵進行總結一下,有不對的地方,敬請各位android大牛進行指出,感激不盡。

1 Android程式的入口

1.1 Activity類

在andriod的應用程式中,用戶所感知的都是一個個應用界面,在android程式裡面每個應用界面對應一個 Activity類,這類似於.NET Winform項目中的Form窗體。與WinForm中的Form一樣,Activity類也是一個基類,每個視圖界面都是繼承Activity的。下麵看一下Activity的擴展類的代碼。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        //執行邏輯代碼
    }    
}

當Activity進行創建的時候,它會執行onCreate函數,當然,在Activity不同的生命周期中,會執行相應的函數。onCreate函數會在創建的時候被調用,同樣的,當這個Activity界面不可見的時候,又會調用onStop函數。這和WinForm又有些類似,這些函數對應Winform窗體的FormLoadFormClosing事件,但是不一樣的,FormClosing事件內部可以取消該窗體的關閉,而Activity卻不可以,這也是很好理解,因為在android程式中,你自己點擊後退鍵,那是肯定會回到前一個界面,當前界面會消失。

我們可以在程式建立許多個Activity界面類,和我們的WinForm程式一樣,也可以建立多個Form窗體界面,那麼問題來了,這麼Activity界面,程式在啟動的時候,應該啟動哪一個?

1.2 AndroidManifest.xml配置文件

在WinForm程式中,程式的啟動一般是Program類中的Main 負責啟動第一個程式界面,而在android程式中則是使用配置文件來配置入口的Activity界面。下麵是AndroidManifest.xml 配置文件中的代碼。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.helloworld"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

該配置文件是每一個android項目都必須要有的,下麵解釋部分節點的含義。

  1. uses-permission :表示用戶需要授權該程式的許可權,上面xml中配置的需要用戶授予訪問網路的許可權。
  2. application : 這個配置節點很重要,它的子節點 activity 就是配置android程式的入口,android:name=".MainActivity" 配置了程式的初始視圖界面為MainActivity (這個MainActivity類在src文件夾中)。而 actioncategory 節點配置也很關鍵,action節點中的android.intent.action.MAIN表明這個Activity是整個應用程式的入口點;而category中的android.intent.category.LAUNCHER意思是把這個Activity歸屬到載入器類,即把這個Activity標註為自動會載入和啟動的Activity,這樣程式啟動時候就先載入這個Activity了。

目前理解的andriod程式運行是這樣的。至於內部如何實現的,目前涉獵不深,暫不明白。(望高手指點)

首先,載入程式需要的一個資源,接著讀取配置文件,找到application節點中配置的入口Activity視圖,然後載入該Activity視圖進行顯示。

2 項目文件夾的含義

新建一個android的項目之後,就會出現如下的目錄結構。

2016_10_5e5358bb-b380-4960-8813-c71061b2b9d7

主要的目錄有src、gen、assets、bin、res。

  1. src:存放項目的源代碼。
  2. gen:該文件是創建項目時候自動生成的,裡面包了一個R.java的靜態類,它裡面包括很多靜態類(內部類),每個靜態類中的靜態成員名稱都對應res文件夾中的一個資源名稱,保存著該資源的索引,方便在代碼中進行獲取資源。
  3. assets:assets文件夾裡面都保存原始的文件格式,在代碼中通過AssetManager來進行訪問。
  4. bin:存放編譯後的apk和資源文件。
  5. res:存放項目需要的資源文件,比如字元串,佈局,皮膚等,這裡面每個資源的索引都保存在R.java類中。

2.1 src

src文件主要存放著項目的java源代碼,比如Activity視圖類,還有其他邏輯處理代碼。

2016_10_4ed87953-fdf7-45b4-9a7e-0aac5b1f702b

2.2 gen

gen目錄中的R.java文件保存著res文件中的資源索引。索引都是int類型的。

2016_10_3f0b7e6c-e03b-4cf0-9c5f-824e5aabbef0

從上往下看,array類保存數組的資源索引,drawable:保存圖片索引,id:保存佈局文件中控制項id,layout:保存佈局文件的索引,string:保存字元串資源的索引。

註意,R.java這個類是保存著當前項目中工程師定義的資源索引,而android.R.java,是保存著android內部預定義好的資源索引。

2.3 res

res中有許多文件夾,不同的文件存放不同的資源。

2016_10_7c88c496-3e86-4536-8dae-44aef20871d0

  1. drawable:存放圖片資源,每添加一個圖片資源,R.drawble類中對應添加一個圖片索引。不同的drawable文件夾存放不同解析度的圖片。
  2. layout:存放界面的佈局,每一個佈局文件對應R.layout裡面的佈局索引,索引名稱與佈局文件名稱一致。
  3. values:裡面存放xml資源文件,每個xml文件可以存放字元串、數組、樣式等數據。xml文件可以按照自己需要進行新建。

2016_10_405dde8e-386c-423b-8cde-123036c9ddb7

string.xml文件中存放了兩個字元串數據,那麼在R.string類中會保存兩個字元串數據的索引,索引名稱和字元串資源中的name標簽的值一致。

2016_10_6f15a41e-ddd6-49fd-b3fc-44e6830f1489

添加一個數組資源,在R.array類中會添加一個數組資源索引,索引名稱和標簽中name屬性值一致。

2016_10_3b76e4d4-bb0d-46fe-9917-550050653707

佈局中文件每個控制項的id也會被添加到R.id類中去。其中在為控制項指定id時有兩種方式,一種是@id/btn ,另外一種是@+id/btn ,前一種是R.id類中已經有了這個id定義,後一種是新增一個btn的id索引。

2.4 assets

assets文件夾主要保存原始的文件格式,比如我需要在代碼中訪問載入一個html文件,或者一個txt文檔,那麼就需要把html文件和txt文檔保存到assets文件下。

3 項目文件夾中各種資源的使用

第2節已經搞清楚了各種文件夾中存放何種資源,那麼本小節總結一下如何在程式代碼中訪問這些資源文件。(所有的資源索引都已經自動更新到R類中)

3.1 使用佈局文件

佈局文件類似wpf的界面佈局文件,如果沒有程式使用它,那它僅僅只是一個xml文件,我們需要把這個文件通過Activity的setContentView方法進行渲染之後,它才會顯示到該Activity視圖上,這種設計方式實現了UI和業務邏輯代碼的分離。

在Activity的onCreate方法中,調用佈局文件,渲染界面。

setContentView(R.layout.activity_main);//實現界面的渲染

Activity的setContentView 方法,帶一個參數,該參數就是佈局文件的索引。該方法通過佈局文件索引實現界面綁定。

獲取佈局文件中的控制項

TextView myView=(TextView) this.findViewById(R.id.textView1);

3.2 獲取values文件夾下的各種資源

訪問字元串資源

String sstr=this.getResources().getString(R.string.app_name);//獲取app名稱

訪問數組資源

int []myarray=this.getResources().getIntArray(R.array.my_array);

3.3 獲取assets文件夾下的資源

在assets文件中保存一個html頁面,我們需要在代碼利用WebView控制項載入這個html頁面.

2016_10_9d924494-9a0e-47d6-b1f4-4045095ca96f

代碼如下:

myWebView.loadUrl("file:///android_asset/myblog.html");  //註意獲取文件的路徑格式

4 總結

將項目中的各個部分的作用弄清楚對於剛接觸android編程的新手我來說是很重要,這是基礎性的東西,明白了這個才能夠更好的深入android的學習。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在瀏覽器上輸入一個網址後,一個漂亮的頁面就呈現在我們眼前,中間發生了什麼了?對於一個普通用戶來講,也許不用思考這個問題,但要作為一個名前端開發人員或是想開發插件的同學來講,掌握瀏覽器的工作原理是非常有必要的! 瀏覽器主要功能 今天討論五種主流瀏覽器——IE、Firefox、Safari、Chrome ...
  • 本文介紹了絕對定位元素其定位對其寬度的影響情況,並且根據絕對定位元素的內容類型不同進行探討,給出了自己總結的規律,以解決元素寬度顯示不對的問題。 ...
  • require和 sea的源碼分析,我之前的博客有寫過, 今天我想分享的是一個很簡單的核心代碼(不帶註釋和空行大概60行), 沒有容錯判斷。 require.js require函數實現用一句話概括: 依次載入require的模塊,然後監測script的onload事件,判斷所有模塊載入成功,執行r ...
  • float大概是css3以前網頁佈局里最常用的一個屬性了,經常看到一言不合就浮動的代碼,就一起來深入挖掘一下這個一半天使一半魔鬼的屬性吧。 本文是讀張鑫旭大神慕課網float視頻後的一些總結及一些拓展用法,視頻地址:http://www.imooc.com/learn/121。該視頻初讀很枯燥,認真 ...
  • 這個視圖對應的控制器是 這樣的話,這個date變數,是不會發生改變的,沒有觸發臟檢查,所以這時候要$apply方法,所有自定義的方法都要用$apply來觸發臟檢查 這樣那個日期就會變化了 $digest方法是觸動臟檢查的方法,為什麼不直接用這個呢,因為$apply會在執行時,運行一個eval語句,如 ...
  • 經常在別人的博客上有看到他們使用一些動態圖片來展示自己的項目運行效果。那麼,關於屏幕錄製與生成 Gif 圖要如何操作呢? 之前想著是不是用**等手機軟體錄製手機屏幕,然後利用**等播放器截取視頻 gif 圖。不過這些屏幕錄製的一般都帶水印。後面有找到方法,說 Android Studio 工具可以對 ...
  • 1.添加不同類型條目 2.常駐懸浮框使用 3.activity_app_manager.xml ...
  • AToolActivity.java SmsBackUp.java 1 package com.itheima.mobilesafe74.engine; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...