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

转载于:https://www.cnblogs.com/jiaozihardworking/archive/2012/02/13/2350011.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从FLC中学习的设计模式系列-创建型模式(3)-工厂方法

工厂方法是一组方法&#xff0c; 他们针对不同条件返回不同的类实例&#xff0c;这些类一般有共同的父类。 工厂方法模式 来自&#xff1a; http://zh.wikipedia.org/wiki/工厂方法模式 工厂方法模式 是一种面向对象的设计模式。通过调用不同的方法返回需要的类&#xff0c;而不…

HTML简单实例加表单的显示效果

HTML可以说是一种十分简单的标记语言&#xff0c;但是对于Web开发还是必不可少的&#xff0c;所以对HTML的标记进行适当的了解 还是十分有必要的。下面我们来演示一下基本的HTML效果和一些简单的标签&#xff0c;以及在表单界面的各种提交方式。 首先是HTML的常用简单标签。 &l…

机器学习笔记(十三)——隐马尔科夫模型

一、隐马尔科夫模型 在马尔科夫模型中&#xff0c;每一个状态代表了一个可以观察的事件&#xff0c;所以&#xff0c;马尔科夫模型有时称为可视马尔科夫模型&#xff08;visible Markov model&#xff0c;VMM&#xff09;&#xff0c;这在某种程度上限制了模型的适应性。在隐马…

elasticsearch基本查询三(英文分词)match查询

#match查询 #match query知道分词器的存在&#xff0c;会对filed进行分词操作, 然后再查询 GET /ib3/user/_search { "query":{ "match":{ "name": "zhaoliu" }} } GET /lib3/user/_search { "query":{ "match"…

solr 3.5 配置及应用(二)

在 solr 3.5 配置及应用(一) 讲过一了 solr 3.5的详细配置&#xff0c;本节我们讲利用solr 的客户端调用solr的应用了&#xff01; 一、利用SolrJ操作solr API 使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法&#xff0c;来操作solr的API的…

elasticsearch控制返回字段查询三(英文分词)match查询

#_source指定查询返回的字段信息 #_source指定查询返回的字段信息 GET /lib3/user/_search {"from":0, "size": 2, "_source": ["address" , "name"] ,"query": {"match": {"interests": &…

通过日志恢复MSSQL数据例子

这段时间看了关于在SQL server 中通过日志和时间点来恢复数据。也看了一些网上的例子&#xff0c;看如何通过日志来恢复数据。 前提条件&#xff1a; 数据库的故障恢复改为非简单模式&#xff0c;去掉自动关闭和自动收缩两个选项 如果是简单模式&#xff1a; 类似下面的语…

ElasticSearch通配符 * 查询(英文检索)

#如果你要查询的字段信息记得不太清楚, 我们也可以使用通配符 * GET /lib3/user/_search {"from":0, "size": 2,"_source": {"includes": "addr*","excludes": ["name" , "bir*"]},"…

(转)CDN是如何工作的?

转载自&#xff1a;CDN是如何工作的&#xff1f; CDN是互联网中使用较频繁的一种技术。你也许常听人说&#xff1a;“我们的网站使用了CDN技术”&#xff0c;但可能他们对CDN的了解并不多&#xff0c;也许只局限于--用了以后网站访问速度会变快。 其实&#xff0c;CDN的原理非常…

机器学习笔记(十七)——EM算法的推导

一、Jensen 不等式 在EM算法的推导过程中&#xff0c;用到了数学上的Jensen不等式&#xff0c;这里先来介绍一下。 若Ω是有限集合{x1,x2,…,xn}{x1,x2,…,xn}&#xff0c;而μ是Ω上的正规计数测度&#xff0c;则不等式的一般形式可以简单地用和式表示: φ(∑i1ng(xi)λi)≤…

基本查询(Query查询中文)

查询语句&#xff1a; GET /lib4/user/_search {"query": {"term": {"interests":"唱歌"}} }#terms:查询某个字段里含有多个关键词的文档 GET /lib4/user/_search {"query":{"terms":{"interests": …

C#实现POST提交方式

网页自动登录和提交POST信息的核心就是分析网页的源代码&#xff08;HTML&#xff09;&#xff0c;在C#中&#xff0c;可以用来提取网页HTML的组件比较多&#xff0c;常用的用WebBrowser、WebClient、HttpWebRequest这三个。 以下就分别用这三种方法来实现&#xff1a; 1、WebB…

EasyCode.Net代码生成器使用心得

前段时间购买了一个EasyCode的正式使用许可 看他的界面设计的不错 就用他生成了一个项目(目地是想把以前我自己的一个程序的界面给更换下 人家有专业的UI设计我自己设计出来的肯定没有人家专业UI设计师弄出来的好看) &#xff0c;项目生成完了 发现还不能直接更换界面他的是sq…

系统管理员必须知道的PHP安全实践

系统管理员必须知道的PHP安全实践 PHP是一种开源服务器端脚本语言&#xff0c;应用很广泛。Apache web服务器提供了这种便利&#xff1a;通过HTTP或HTTPS协议&#xff0c; 访问文件和内容。配置不当的服务器端脚本语言会带来各种各样的问题。所以&#xff0c;使用PHP时要小心。…

ElasticSearch filter查询

学习查询之前&#xff0c;我还是老规矩&#xff0c;先准备数据 #Filter查询 #filter是不计算相关性的&#xff0c;同时可以cache.因此&#xff0c;filter速度要快于query. POST /lib5/items/_bulk {"index":{"_id": 1}} {"price": 40,"ite…

SQL Server 2005中的分区表(四):删除(合并)一个分区

在前面我们介绍过如何创建和使用一个分区表&#xff0c;并举了一个例子&#xff0c;将不 同年份的数据放在不同的物理分区表里。具体的分区方式为&#xff1a; 第1个小表&#xff1a;2010-1-1以前的数据&#xff08;不包含2010-1-1&#xff09;。 第2个小表&#xff1a;2010-1-…

畅通您的iOS开发之路

随着大家对苹果产品的趋之若鹜&#xff0c;iphone与ipad软件开发的前景也相当广阔。然而&#xff0c;目前精通iOS开发的专业人才却是凤毛麟角。因此&#xff0c;安博中 程在2012年推出重磅课程——“iPhone与iPad开发实战之路——精通iOS开发”高级培训班&#xff0c;为想从事i…

tool vmmap 配置符号文件 symbolic file

转载于:https://www.cnblogs.com/titer1/archive/2012/03/21/2410316.html

使用简单的5个步骤设置 Web服务器集群

通过在多个处理器之间分担工作负载并采用多种软件恢复技术&#xff0c;能够提供高度可用的环境并提高环境的总体 RAS&#xff08;可靠性、可用性和可服务性&#xff09;。可以得到的好处包括&#xff1a;更快地从意外中断中恢复运行&#xff0c;以及将意外中断对终端用户的影响…

浅谈HotSpot逃逸分析

JIT 即时编译&#xff08;Just-in-time Compilation&#xff0c;JIT&#xff09;是一种通过在运行时将字节码翻译为机器码&#xff0c;从而改善字节码编译语言性能的技术。在HotSpot实现中有多种选择&#xff1a;C1、C2和C1C2&#xff0c;分别对应client、server和分层编译。 …