新接触一门程序或者开发框架,我一般都要先弄清楚程序的入口在哪里,程序怎么运行的;建立一个项目后,各个文件夹有什么作用以及如何使用等等。理清楚这些东西对以后开发是很有好处的,古话说得好,工欲善其事,必先利其器。本文主要总结android程序的入口点和程序的运行流程(初识),android项目中各文件夹的含义,以及它们的使用。

刚接触android程序,配置好开发andriod的环境,建立一个项目,框架自带的经典hello程序,然后就可以在虚拟设备上进行运行了。但是对程序从哪里开始运行的,下一步应该执行哪个函数,以及各个项目文件夹干什么的,里面存储什么,都有什么作用等等这些都是一脸懵逼的。经过这几天的摸索,对这些概念有那么一点点理解,下面进行总结一下,有不对的地方,敬请各位android大牛进行指出,感激不尽。

1 Android程序的入口

1.1 Activity类

在andriod的应用程序中,用户所感知的都是一个个应用界面,在android程序里面每个应用界面对应一个 Activity类,这类似于.NET Winform项目中的Form窗体。与WinForm中的Form一样,Activity类也是一个基类,每个视图界面都是继承Activity的。下面看一下Activity的扩展类的代码。

public class MainActivity extends Activity {

	@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
//执行逻辑代码
}
}

当Activity进行创建的时候,它会执行onCreate函数,当然,在Activity不同的生命周期中,会执行相应的函数。onCreate函数会在创建的时候被调用,同样的,当这个Activity界面不可见的时候,又会调用onStop函数。这和WinForm又有些类似,这些函数对应Winform窗体的FormLoadFormClosing事件,但是不一样的,FormClosing事件内部可以取消该窗体的关闭,而Activity却不可以,这也是很好理解,因为在android程序中,你自己点击后退键,那是肯定会回到前一个界面,当前界面会消失。

我们可以在程序建立许多个Activity界面类,和我们的WinForm程序一样,也可以建立多个Form窗体界面,那么问题来了,这么Activity界面,程序在启动的时候,应该启动哪一个?

1.2 AndroidManifest.xml配置文件

在WinForm程序中,程序的启动一般是Program类中的Main 负责启动第一个程序界面,而在android程序中则是使用配置文件来配置入口的Activity界面。下面是AndroidManifest.xml 配置文件中的代码。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloworld"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
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> </manifest>

该配置文件是每一个android项目都必须要有的,下面解释部分节点的含义。

  1. uses-permission :表示用户需要授权该程序的权限,上面xml中配置的需要用户授予访问网络的权限。
  2. **application ** : 这个配置节点很重要,它的子节点 activity 就是配置android程序的入口,android:name=".MainActivity" 配置了程序的初始视图界面为MainActivity (这个MainActivity类在src文件夹中)。而 actioncategory 节点配置也很关键,action节点中的android.intent.action.MAIN表明这个Activity是整个应用程序的入口点;而category中的android.intent.category.LAUNCHER意思是把这个Activity归属到加载器类,即把这个Activity标注为自动会加载和启动的Activity,这样程序启动时候就先加载这个Activity了。

目前理解的andriod程序运行是这样的。至于内部如何实现的,目前涉猎不深,暂不明白。(望高手指点)

首先,加载程序需要的一个资源,接着读取配置文件,找到application节点中配置的入口Activity视图,然后加载该Activity视图进行显示。

2 项目文件夹的含义

新建一个android的项目之后,就会出现如下的目录结构。

主要的目录有src、gen、assets、bin、res。

  1. src:存放项目的源代码。
  2. gen:该文件是创建项目时候自动生成的,里面包了一个R.java的静态类,它里面包括很多静态类(内部类),每个静态类中的静态成员名称都对应res文件夹中的一个资源名称,保存着该资源的索引,方便在代码中进行获取资源。
  3. assets:assets文件夹里面都保存原始的文件格式,在代码中通过AssetManager来进行访问。
  4. bin:存放编译后的apk和资源文件。
  5. res:存放项目需要的资源文件,比如字符串,布局,皮肤等,这里面每个资源的索引都保存在R.java类中。

2.1 src

src文件主要存放着项目的java源代码,比如Activity视图类,还有其他逻辑处理代码。

2.2 gen

gen目录中的R.java文件保存着res文件中的资源索引。索引都是int类型的。

从上往下看,array类保存数组的资源索引,drawable:保存图片索引,id:保存布局文件中控件id,layout:保存布局文件的索引,string:保存字符串资源的索引。

注意,R.java这个类是保存着当前项目中工程师定义的资源索引,而android.R.java,是保存着android内部预定义好的资源索引。

2.3 res

res中有许多文件夹,不同的文件存放不同的资源。

  1. drawable:存放图片资源,每添加一个图片资源,R.drawble类中对应添加一个图片索引。不同的drawable文件夹存放不同分辨率的图片。
  2. layout:存放界面的布局,每一个布局文件对应R.layout里面的布局索引,索引名称与布局文件名称一致。
  3. values:里面存放xml资源文件,每个xml文件可以存放字符串、数组、样式等数据。xml文件可以按照自己需要进行新建。

string.xml文件中存放了两个字符串数据,那么在R.string类中会保存两个字符串数据的索引,索引名称和字符串资源中的name标签的值一致。

添加一个数组资源,在R.array类中会添加一个数组资源索引,索引名称和标签中name属性值一致。

布局中文件每个控件的id也会被添加到R.id类中去。其中在为控件指定id时有两种方式,一种是@id/btn ,另外一种是@+id/btn ,前一种是R.id类中已经有了这个id定义,后一种是新增一个btn的id索引。

2.4 assets

assets文件夹主要保存原始的文件格式,比如我需要在代码中访问加载一个html文件,或者一个txt文档,那么就需要把html文件和txt文档保存到assets文件下。

3 项目文件夹中各种资源的使用

第2节已经搞清楚了各种文件夹中存放何种资源,那么本小节总结一下如何在程序代码中访问这些资源文件。(所有的资源索引都已经自动更新到R类中)

3.1 使用布局文件

布局文件类似wpf的界面布局文件,如果没有程序使用它,那它仅仅只是一个xml文件,我们需要把这个文件通过Activity的setContentView方法进行渲染之后,它才会显示到该Activity视图上,这种设计方式实现了UI和业务逻辑代码的分离。

在Activity的onCreate方法中,调用布局文件,渲染界面。

setContentView(R.layout.activity_main);//实现界面的渲染

Activity的setContentView 方法,带一个参数,该参数就是布局文件的索引。该方法通过布局文件索引实现界面绑定。

获取布局文件中的控件

TextView myView=(TextView) this.findViewById(R.id.textView1);

3.2 获取values文件夹下的各种资源

访问字符串资源

String sstr=this.getResources().getString(R.string.app_name);//获取app名称

访问数组资源

int []myarray=this.getResources().getIntArray(R.array.my_array);

3.3 获取assets文件夹下的资源

在assets文件中保存一个html页面,我们需要在代码利用WebView控件加载这个html页面.

代码如下:

myWebView.loadUrl("file:///android_asset/myblog.html");  //注意获取文件的路径格式

4 总结

将项目中的各个部分的作用弄清楚对于刚接触android编程的新手我来说是很重要,这是基础性的东西,明白了这个才能够更好的深入android的学习。

Android程序入口以及项目文件夹的含义和使用总结—入门的更多相关文章

  1. asp.net -mvc框架复习(2)-创建ASP.NET MVC 第一个程序以及MVC项目文件夹说明

    建议vs2013或2013以上版本的vs,要是跨平台的话最好用vs2015或vs2017的asp.net mvc core . 1.创建ASP.NET MVC 第一个程序 打开vs2013->文 ...

  2. android程序入口

    android程序的真正入口是Application类的onCreate方法

  3. Android中项目中各个文件夹的含义和用途详解

    1.src:存放所有的*.java源程序. 2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3.assets:可以存放项目一些较大的资源文件,例如:图片. ...

  4. [zhuan]Android程序的真正入口Application

    http://blog.csdn.net/coding_or_coded/article/details/6602560 接触android已经有一段时间了,一直以为android程序的入口是配置文件 ...

  5. android程序的真正入口

    代码出自MtAndroid 3.1.2完全开发手册,适用于Android平台. 概述 android程序的真正入口是Application类的onCreate方法.它的继承关系如下所示: java.l ...

  6. Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结

    前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...

  7. android开发------第一个android程序

    好吧,现在我们就一起来写第一个android程序,看它带给了我们什么.sdk的使用和虚拟机的创建我就不说了.项目创建过程先略过,不太重要. 那第一个程序我们能学到什么知识呢?一起看吧.^-^ 在IDE ...

  8. Android资源文件及文件夹介绍

    在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片, ...

  9. Android 程序目录介绍

    还是回到 Eclipse 中,首先展开 HelloWorld 项目,你会看到如图 1.17 所示的目录结构. 图   1.17 一开始看到这么多陌生的东西,你一定会感到有点头晕吧.别担心,我现在就对上 ...

随机推荐

  1. 2013/11/21工作随笔-PHP开启多进程

    今天被问到一个问题,php如何开启多进程才比较稳定. php开启多进程执行一个操作有哪些方法: 首先想到的是使用pcntl的fork 具体可以参考之前的文章:PHP的pcntl多进程 其次想到的方法是 ...

  2. GPUImage滤镜之锐化

    应用锐化工具可以快速聚焦模糊边缘,提高图像中某一部位的清晰度或者焦距程度,使图像特定区域的色彩更加鲜明. 在应用锐化工具时,若勾选器选项栏中的“对所有图层取样”复选框,则可对所有可见图层中的图像进行锐 ...

  3. 微软必应词典客户端的案例分析——个人Week3作业

    第一部分 调研,评测 Bug探索 Bug No1.高亮语义匹配错位 环境: windows8,使用必应词典版本PC版:3.5.0 重现步骤: 1. 搜索"funny face"这一 ...

  4. thread_fork/join并发框架1

    一.线程并发控制  Thread.Executor.ForkJoin和Actor  1.裸线程      Runnable接口,调用.start()开始,没有现成的API来结束线程,你需要自己来实现, ...

  5. U3D自定义Inspector项未触发保存事件的解决方案

    1.问题描述与解决方案 1.1.说明 应该只有起步做U3D编辑器插件的部分同行需要了解本文. 该问题源于在做UI插件的时候,发现Inspector面板上手动修改值后,没有触发U3D编辑器本身的修改事件 ...

  6. Dev 饼图

    // 添加引用命名空间 using DevExpress.XtraCharts; /* *具体步骤:(1)先构建饼图对象的数据源DataTable * (2)再设置饼图对象的相关参数 * (3)饼图空 ...

  7. 【AngularJS学习笔记】00 序

    AngularJS通过新的属性与表达式来扩展HTML,有一种很形象的叫法,定义它为声明式语言. 为克服HTML在构建应用上的不足而设计! 这是它的目标. 它的官网进不去,应该是被墙了,这是goegle ...

  8. [moka同学笔记]yii2 activeForm 表单样式的修改(二)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABAEAAANXCAIAAADLkdErAAAgAElEQVR4nOzdfWwc953nef6zwO5Zg8

  9. (旧)子数涵数·UI设计——扁平化设计

    一.基本资料 1.由来 扁平化设计这个概念,是由Google(谷歌)在2008年提出的:它的首个实践者是microsoft(微软),microsoft在2012年发行了win8系统,这个系统的外观主题 ...

  10. c#泛型方法返回null的问题

    c#的泛型方法实现和java实现有点不同,在java中,所有的泛型方法运行时类型必须是引用类型,所以和非泛型一样可以返回null. 但是c#中有点不同,可以同时是值类型和引用类型,而值类型不能赋值nu ...