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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...