[转载]android 工程结构和运行顺序

[转载]android 工程结构,它到底是怎么运行的。 – 勤劳的饺子 – 博客园.

android 工程结构,它到底是怎么运行的。

为了帮助理解,我决定先上传一个工程截图,这个是我做的一个小作业,3、4个小时完成,没什么含金量,就是交差用的,这里给大家做个模板吧。

 

我把一个工程分6个部分来一一说好了。

1. 这里就是存放我们写的类的,由于我这个简单,就没有分很多包了,一个包搞定一切。

2. 这个是编译生成的,千万不要乱动它,会导致很可怕的错误,另外,如果明明写的很对,但是就是编译通不过的话,一定是这个东西除了问题,可以上网搜搜解决办法,不知道能不能删了这个文件重新编译。

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了~。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏