一个android工程的运行过程

本文详细介绍了Android应用程序从启动到显示界面的过程,包括配置清单文件的解析、MainActivity的指定及其实现方式、资源引用机制、布局文件的创建与加载等核心内容。

说起来惭愧至极,学习Andriod也有点久了,之前一直没怎么理解的一些问题,在这篇博文里找到了答案,与大家分享下

rt

首先 :  当一个工程部署到模拟环境上后,当用户点击你的应用名字“android:label="@string/app_name">”的时候,操作系统会根据配置清单文件(AndroidManifest.xml)寻找到下面的配置节点“<activity android:name=".HelloWorldActivity”这个activity;android:icon="@drawable/icon" 这个是应用显示的图标 这个你可以修改,自己找一个png格式的图片,拷贝到drawable-hdpi文件夹下,你会在R.java中自动添加这个图片的名字的属性,然后在这里修改icon为新生成的图片的名字就行了。

Java代码 复制代码  收藏代码
  1. <application android:icon="@drawable/icon" android:label="@string/app_name">   
  2.         <activity android:name=".HelloWorldActivity"  
  3.                   android:label="@string/app_name">   
  4.             <intent-filter>   
  5.                 <action android:name="android.intent.action.MAIN" />   
  6.                 <category android:name="android.intent.category.LAUNCHER" />   
  7.             </intent-filter>   
  8.         </activity>   
  9.   
  10.     </application>  
<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".HelloWorldActivity"
                  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>

    这个配置节点下的activity节点,这个节点中的

Java代码 复制代码  收藏代码
  1. <intent-filter>   
  2.                <action android:name="android.intent.action.MAIN" />   
  3.                <category android:name="android.intent.category.LAUNCHER" />   
  4.            </intent-filter>  
 <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>


     这两个配置,告诉操作系统,这个activity是程序运行的入口类,相当与main方法;在一个应用中只要有一个应用配这个属性就行了;

然后 :我们看看被指定为程序入口的这个activity的代码:

Java代码 复制代码  收藏代码
  1. package com.android.activity;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5.   
  6. public class HelloWorldActivity extends Activity {   
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {   
  10.         super.onCreate(savedInstanceState);   
  11.         setContentView(R.layout.main);   
  12.     }   
  13. }  
package com.android.activity;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorldActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

    android平台实例化这个activity类,其中的onCreate这个方法不是由程序员来调用的,是由android这个平台来调用  的,这个类被实例化后就直接调用这个方法了。其中的super调用的父类的方法,是用来画出整个应用的界面的;

值得一提的是

Java代码 复制代码  收藏代码
  1. setContentView(R.layout.main);  
setContentView(R.layout.main);

这端代码:android的设计模式是遵守mvc设计模式的,c这层就是activity层,v层是xml文件,在工程目录中的res下的layout目录下的文件,布局文件,m业务层,要自己写,不要和c层放到一起,这样代码的质量很差;那我们回到这句代码,我们现在知道activity相当与action了,那么在struts中负责跳转页面的代码是mapping.forword("xxxx");我想大家都知道,那么类比,在activity中,负责跳转的就是setContentview(xxx);括号中的内容就是视图层的引用。那我们再来看看这个引用的东西

Java代码 复制代码  收藏代码
  1. R.layout.main  
R.layout.main

我前面的文章说过,R.java文件是用来引用资源的,那么看看这里我们就知道他引用了谁。对了,就是loayout目录下的main.xml;我们可以看R.java文件中的代码

Java代码 复制代码  收藏代码
  1. /* AUTO-GENERATED FILE.  DO NOT MODIFY.  
  2.  *  
  3.  * This class was automatically generated by the  
  4.  * aapt tool from the resource data it found.  It  
  5.  * should not be modified by hand.  
  6.  */  
  7.   
  8. package com.android.activity;   
  9.   
  10. public final class R {   
  11.     public static final class attr {   
  12.     }   
  13.     public static final class drawable {   
  14.         public static final int icon=0x7f020000;   
  15.     }   
  16.     public static final class layout {   
  17.         public static final int main=0x7f030000;   
  18.     }   
  19.     public static final class string {   
  20.         public static final int app_name=0x7f040001;   
  21.         public static final int hello=0x7f040000;   
  22.     }   
  23. }  
/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.android.activity;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}

 

Java代码 复制代码  收藏代码
  1. public static final class layout {   
  2.         public static final int main=0x7f030000;   
  3.     }  
public static final class layout {
        public static final int main=0x7f030000;
    }

这里就是刚才调用的东西,最终会对应工程目录下的res下的layout下的main。xml文件,如果我们在layout下再建立一个androidxml类型的文件,保存后,会在R.java中自动生成对应的索引;

再然后

说道main.xml文件,我们看看这个文件,以往我们都是用html或者jsp来显示页面,现在用xml了,看看有什么不同,

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView     
  8.     android:layout_width="fill_parent"    
  9.     android:layout_height="wrap_content"    
  10.     android:text="@string/hello"  
  11.     />  
  12. </LinearLayout>  

 严格遵守xml文件的格式,

 其中,标签

Xml代码 复制代码  收藏代码
  1. LinearLayout  

直接翻译中文是线性布局,那就是一种布局方式了,swing中也有,就是指在这个标签中的元素每个元素占一行。还有绝对布局;不建议使用,因为不知道使用者的手机屏幕大小。还有相对布局:常用;

Xml代码 复制代码  收藏代码
  1. TextView   

相当于label标签。

再来仔细看看,标签中的属性

 

Xml代码 复制代码  收藏代码
  1. <LinearLayout    
  2. <!--这个是标准的格式-->  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4. <!-- 布局方式 由上到下垂直显示-->  
  5.     android:orientation="vertical"  
  6. <!--应用界面的宽:填充父面板 还有个取值"wrap_content" 是根据内容的长度来决定界面大小-->  
  7.     android:layout_width="fill_parent"  
  8. <!--应用界面的高:填充父面板 对于这个应用其父面板就是整个屏幕-->  
  9.     android:layout_height="fill_parent"  
  10.     >  
  11. <TextView     
  12. <!--定制这个lable的宽度:父界面的宽度-->  
  13.     android:layout_width="fill_parent"    
  14. <!--定制这个lable的高度:和内容的大小相同-->  
  15.     android:layout_height="wrap_content"    
  16. <!--lable的内容:@代表访问R.java文件,string是R.java文件中的一个元素。/就是访问符号   
  17. hello是具体那个资源 这样就调用了文字 这些文字的信息在values文件夹下的string.xml文件中定义   
  18.  这样做是为了国际化 这个文件夹下不是只能有stirng.xml这一个文件存在,可以有很多xml文件   
  19. 所以我们可以把文字分门别类存放 有利于复用 减少资源占用-->  
  20.     android:text="@string/hello"  
  21.     />  
  22.   
  23. 过程基本就是这样了;  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值