android 工程結構,它到底是怎麼啟動並執行。

來源:互聯網
上載者:User

為了協助理解,我決定先上傳一個工程,這個是我做的一個小作業,3、4個小時完成,沒什麼含金量,就是交差用的,這裡給大家做個模板吧。

 

我把一個工程分6個部分,如左面的圖所示,然後來一一說好了。

1. 這裡就是存放我們寫的類的,由於我這個簡單,就沒有分很多包了,一個包搞定一切。

2. 這個是編譯產生的,裡面有個R.java檔案,千萬不要亂動它,會導致很可怕的錯誤,另外,如果明明寫的很對,但是就是編譯通不過的話,一定是這個東西除了問題,可以上網搜搜解決辦法,不知道能不能刪了這個檔案重新編譯。

3. 這個三個檔案夾是用來放圖片的,比如自己做的按鈕啊什麼的,分高(hdpi)中(mdpi)低(ldpi)三種像素圖片檔案夾,在不同螢幕下調用不同像素的圖片。

4. 看名字就知道,這是些UI的地方,這裡寫好了以後,在java檔案裡調用。

5. 這個是存放一些字串的,比如有些字串常用到啊,多處被引用的話,就給它取個名字放到這裡,然後就可以實現字串共用了。

6. 就是上一篇介紹過的,聲明activity和許可權的地方。

 

所以,綜上所述,一個android程式被啟動並執行時候,程式先在manifest檔案裡找到入口類,然後進入入口類的onCreate()函數開始執行,其中UI在layout檔案夾中調用,圖片在res檔案夾中調用。

 

接下來我們進入代碼,用代碼稍微分析一下,就清楚了:

 

首先,我們看到在manifest檔案裡申明了入口類是SecretDiaryActivity.java:

<activity android:name=".SecretDiaryActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

接著我們進入到SecretDiaryActivity.java檔案,找到onCreate()函數:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.diary_list);
mDbHelper = new DiaryDbAdapter(this);
ll=(LinearLayout)findViewById(R.id.bg); //part one
mDbHelper.open();
// code=(EditText)
//取回所有庫中的日記顯示
// if(currentbg)

if(mDbHelper.isCode()){
Intent i = new Intent(this, EnterPage.class);
startActivityForResult(i, ACTIVITY_ENTER);
}
int bg=mDbHelper.getbg();
Resources resources = getBaseContext().getResources();
Drawable btnDrawable=resources.getDrawable(R.drawable.bg);
switch(bg){
case 0:
break;
case 1:
btnDrawable=resources.getDrawable(R.drawable.bg2);
break;
case 2:
btnDrawable=resources.getDrawable(R.drawable.bg3);
break;
}

ll.setBackgroundDrawable(btnDrawable);
renderListView(); //part two
}

可以看到,setContentView(R.layout.diary_list);這一句,就是定義了這個activity的layout調用的是哪個xml檔案。

順帶看一下,標註了part one的這一句,就是用來申明一個UI的,根據ID來尋找布局,這個時候我們就需要找到名字叫做bg的一個LinearLayout,這個時候用到的就是上面的第二部分,gen檔案夾下的R.java檔案,編譯器從這裡找到bg的物理地址,我們看到bg的定義其實在diary_list.xml檔案中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/bg"
>"

<ListView android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>"
<TextView android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
        android:text="還沒有開始寫日記哦親!\n點擊Menu按鈕開始寫日記吧:)"
android:layout_margin="20px"
android:textSize="17px"
android:textStyle="bold"
android:textColor="#000"
/>
</LinearLayout>

檔案第五行進行了對一個layout布局的id定義,這裡任何一個控制項,布局,都可以給它一個id,以方便在java檔案中調用並操作它,利用ID找到它之後,我們就可以通過ll來操作它了,比如這裡我用ll給bg設定了一個背景。

這就是一個android軟體的大致架構了,知道了運作流程,可以很方便的知道什麼時候該在哪裡寫東西了,接下來如何去做具體的功能還是要查看官方的guide了~。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.