[转载]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了~。