android 工程結構,它到底是怎么運行的。


為了幫助理解,我決定先上傳一個工程截圖,這個是我做的一個小作業,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了~。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM