2.1 创建一个Android项目

Application Name: 应用名称(安装在手机上显示的名字)
Project Name : 项目名称
Package Name : 包名

Min SDK Version : 最低运行版本号
Create Activity : 主Activity类名

Minimum Required SDK : 最低要求的sdk
Target SDK : 选择目标SDK
Compile SDK : 编译SDK
Theme: 主题
Holo : n. 完全;整体
Holo Dark : 全黑
Holo Light:全息光
None(默认值)

 2.2 剖析 Android Project 结构

1. src 目录用来存放项目源代码(.java)
2. gen 目录下存放R.java 文件,R.java文件是该项目所有资源的索引文件,在建立项目时自动生成,R.java 文件属于只读模式,不能更改,一般不会对其进行修改。R 类中包含很多静态类,其中这些静态类的名称和res 目录下的资源目录一一对应。
3. Android (Library) 目录: 此目录下的“android.jar”文件指向的是 Android SDK,是开发Android应用程序所用到的所有API函数库。
4. assets 目录是用来存放引用的外部资源,此目录与res 目录最大的区别在于 res 路径下的资源文件都会在R 资源文件中自动生成对应的资源ID,而assets 目录下的资源不会。
5. res 目录是用来存放项目中用到的资源文件。
6.AndroidManifest 是当前项目的配置文件,其中包括编码格式、应用的icon、程序的版本号以及指定该程序使用到的服务等等。
7. default.properties 是记录项目工程的环境信息。

2.3 AndroidManifest.xml 与应用程序功能组件

在每个 Android 应用程序中都必须具备 AndroidManifest.xml 这个文件,此文件定义了该程序的主要功能、处理的信息,以及执行的动作等等。

在上面的层次图中,在同一层的标签都是按照位置关系写在了一起,不同层的标签并不都是包含关系。
1. 最外层的<manifest>定义了软件的属性,如包路径、程序的版本、版次等等。
2. 第2层<application>定义应用程序属性及功能;如 android:icon 指定了应用的 icon图标, android:label 定义了应用程序的名称,并且声明功能<activity>活动。
3. 第3层是定义功能组件的一层,如<activity> 活动、<receiver> 意图与广播接收、<service>服务、<provider>属性(内容)提供者,都必须定义在<application>中,所以这里定义了<activity>活动类以及活动类名称。
4. <intent-filter> 其功能如一个过滤器。
5.第5层中的<action>定义了意图动作的类型;<category>是意图的属性,这里的值android.intent.category.LAUNCHER 表示启动应用程序的时候,意图将该 activity显示在屏幕上;这种启动程序的意图活动只能有一个。

<activity> - Activity(活动)
Android中一个 activity 就是一个用户界面,比如手机拨号界面、通讯录界面等都是活动。在应用程序中可以有一个或多个活动,但是如果新建了一个活动,必须在AndroidManifest.xml 中声明。

<receiver> - Intent (意图) 与 Broadcast Receiver (广播接收)
意图是描述动作的机制,在 Android 手机中几乎都有意图阶段。例如,当前有一个“发出一条信息”的意图(Intent), 这时候如果应用程序需要发送消息,调用该意图即可。
既然有意图,当然也需要在应用程序中注册一个活动来处理该意图,那么接收意图可称为 Broadcast Receiver (广播接收); 举个例子,比如手机启动的时候会有一个系统发出“系统启动”的意图,只要在应用程序中注册活动来接受此意图,就可以让其应用程序在手机启动的时候自动启动程序。因为在 Android中有很多意图,为了使接收具有针对性,可以在 <intent-filter>中指定接收意图的动作<action>,因此 <intent-filter>的作用就是一个意图的过滤器。

<service> - 服务
简单来说,就是应用程序在后台运行的任务,无需显示界面、也不必跟用户进行交互,但是又需要长时间在后台进行运行;例如 Android 系统中的音乐播放器,当选定歌曲进行播放时,即时用户将播放器应用程序放入后台,然后打开其他程序,音乐也会照常播放,那么肯定播放器程序添加了 service 服务功能。

<provider> - Content Provider (内容提供者)
带有内容提供者功能的应用所进行的动作是让使用者可以保存他们的信息或文件,例如:Android 手机联系人程序提供了一个内容提供者,任何要使用联系人信息的应用程序都可以共享内容提供者的所有信息,比如联系人的姓名、电话号、地址等等。

在AndroidManifest.xml 文件中除了以上介绍的功能组件之外,Android 对某些关键操作和访问都是有权限来限制的。假如一个应用程序需要将一些数据保存到手机的 SDCard 中,那么就需要在AndroidManifest.xml 中设置添加写入 SD卡权限,其语法是 <uses-permission>。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission>和<application>在AndroidManifest.xml 语法中属于同一层次。

2.4 运行 Android 项目(启动 Android 模拟器)

太简单,可以百度,略

2.5 详解第一个 Android 源码

@Override //重写了基类Activity中的onCreate()方法;如果没有这个标志,编译代码的时候会认为是开发者自定义的函数protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}

对于布局、组件等属性的设置格式一般为:

<布局/组件名称 android:属性="属性类型"  ... />

2.6 Activity 生命周期

单个Activity的生命周期

1. onCreate: Activity 初次创建时被调用,一般在这里创建 view、初始化布局信息、将数据绑定到 list 以及设置监听器等等。如果Activity 首次创建,本方法将会调用 onStart(); 如果 Activity是停止后重新显示,则将调用 onRestart() 。
2. onStart: 当Activity对用户即将可见的时候被调用,其后调用 onResume() 。
3. onRestart: 当Activity停止后重新显示的时候会被调用,然后调用 onStart() 。
4.onResume: 当用户能在界面中进行操作的时候被调用。
5. onPause: 当系统要启动一个其他的Activity时调用(其他的Activity 显示之前),这个方法用来停止动画和其他占用CPU资源的事情。所以在这里应该提交保存那些持久数据,这些数据可以在 onResume() 方法中读出。
6. onStop: 当另外一个 Activity 恢复并遮盖住当前 Activity, 导致其对用户不再可见时调用。 一个新 Activity启动、其他 Activity 被切换至前景、当前 Activity 被销毁时都会调用此函数。如果当 Activity 重新回到前景与用户交互时会调用 onRestart(),如果 Activity将退出则调用 onDestory() 。
7. onDestory: 在当前的Activity 被销毁前所调用的最后一个方法,当进程终止时调用(对Activity 直接调用 Finish 方法或者系统为了节省空间而临时销毁此 Activity的实例)。

代码:

package com.example.activitytry;import android.os.Bundle;
import android.app.Activity;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);System.out.println("----------onCreate------------");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("----------onDestroy------------");}@Overrideprotected void onPause() {super.onPause();System.out.println("----------onPause------------");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("----------onRestart------------");}@Overrideprotected void onResume() {super.onResume();System.out.println("----------onResume------------");}@Overrideprotected void onStart() {super.onStart();System.out.println("----------onStart------------");}@Overrideprotected void onStop() {super.onStop();System.out.println("----------onStop------------");}}

(1)受限启动项目进入MainActivity类,打印信息如下图所示:

(2)单击手机上的“Back”按键,打印信息如下图所示:

(3)“Back”后重新点击程序图标进入,打印信息如下图所示:

(4)单击手机上的“Home”(小房子)按键,打印信息如下图所示:

(5)“Home”后单击程序图标进入,打印信息如下图所示:

以上5中状态,详细的诠释了一个Activity的生命周期。这5个状态中值得注意的是切入后台“Back”和“Home”的区别,如下图所示:

多个Activity的生命周期
一个 Android应用程序,是可以存在多个Activity的。

package com.example.activitytry;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.v("MainActivity","----------onCreate------------");btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent i = new Intent(MainActivity.this, OtherActivity.class);startActivity(i);}});}@Overrideprotected void onDestroy() {super.onDestroy();Log.v("MainActivity", "----------onDestroy------------");}@Overrideprotected void onPause() {super.onPause();Log.v("MainActivity", "----------onPause------------");}@Overrideprotected void onRestart() {super.onRestart();Log.v("MainActivity", "----------onRestart------------");}@Overrideprotected void onResume() {super.onResume();Log.v("MainActivity", "----------onResume------------");}@Overrideprotected void onStart() {super.onStart();Log.v("MainActivity", "----------onStart------------");}@Overrideprotected void onStop() {super.onStop();Log.v("MainActivity", "----------onStop------------");}}

如下图所示,添加“跳转”按钮,单击按钮会跳转到另外的一个Activity(OtherActivity)。

(1)在MainActivity中,单击“跳转”按钮:

(2)当OtherActivity打开后,单击手机上的“Back”按钮:

Android OS 管理 Activity 的方式

对于Activity的管理,Android底层是用堆栈来存放Activity的,也就是说打开后Activity将放入栈顶,显示在屏幕的最上层,而之前的Activity则会被新打开的Activity覆盖。例如一个程序正在运行,突然手机来电,Android接收到来电广播后会打开一个接听电话的Activity放入堆栈的栈顶,这样一来运行的程序就会被接听到的Activity所覆盖。

2.7 Android 开发常见问题

Android SDK 与 Google APIs 创建 Emulator的区别

将Android项目导入Eclipse

在 Eclipse 中显示Android开发环境下常用的View窗口

在 Eclipse 中利用打印语句(Log) 调试Android 程序

在 Eclipse 中 真机运行Android项目

模拟器横竖屏切换

模拟器横竖屏切换的方法是同时按下电脑键盘的“Ctrl”和“F11”两个按键,或者同时按下“Ctrl”和“F12”也可以。

打包Android项目

所有的Android应用程序都以“.apk”为后缀名命名一个安装包,这个apk包中包含应用编译后源码、资源文件、应用的版本信息、用到的权限等等。
在Android系统的手机上安装apl文件的时候,其应用程序不仅用到“.apk”为后缀的文件,而且还必须利用数字证书签名后才可以安装到手机或者模拟器上。

【读书笔记《Android游戏编程之从零开始》】2.Hello,World!相关推荐

  1. 《Android游戏编程之从零开始》书评之基础的魅力

    拜读完<Android游戏编程之从零开始>的试读章节之后,感受颇深,对于游戏开发过程中用到的知识,有了初步的了解,此书就一些基本图形为例,展开对游戏开发的基本原理的阐述.本人感觉,介绍一种 ...

  2. 【Android】Android游戏编程之从零开始

    <Android游戏编程之从零开始>主要系统地讲解了Android游戏开发,从最基础部分开始,让零基础的Android初学者也能快速学习和掌握Android游戏开发.<Android ...

  3. 【通知】▁▂▃ Himi 著作《Android游戏编程之从零开始》★书籍源码+第4/6/7样章★博客系列源码整理打包-免费下载★ ▃▂▁

    2011年9月22日(Himi的22岁生日当天),Himi的著作:<Android游戏编程之从零开始>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买): 感谢一直 ...

  4. [转] Himi 著作《Android游戏编程之从零开始》★书籍源码+第4/6/7样章—免费下载★...

    本文转自:http://blog.csdn.net/xiaominghimi/article/details/6802444 Himi 原创, 转载请注明出处,谢谢! 原文地址:http://blog ...

  5. [置顶]▁▂▃ Himi 著作《Android游戏编程之从零开始》★书籍源码免费下载★ ▃▂▁...

    Himi 原创, 转载请注明出处,谢谢! 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6802444 2011年9月22日(Himi的 ...

  6. ★书籍源码免费下载★Himi 著作《Android游戏编程之从零开始》

    2011年9月22日(Himi的22岁生日当天),Himi的著作:<Android游戏编程之从零开始>一书正式发售:(请到书店.淘宝.当当网等进行购买) 感谢一直以来关注Himi的童鞋们. ...

  7. android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...

    很多编程爱好者都编写过推箱子游戏编程吧,最近有好些朋友看见我以前的推箱子程序后, 问我是怎么做的.我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空.正好现在放假了,而且离回 ...

  8. 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)...

    对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2) ...

  9. 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)

    1. Animation动画 在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimation ...

  10. 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)...

    1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...

最新文章

  1. 生信小白7行代码画一个高颜值的世界地图
  2. SAP Batch Derivation功能初探之一
  3. Spring框架中bean的生命周期
  4. 关于对2020年数据中心的发展的8个预测
  5. python时间转换
  6. 1491. Look and Say
  7. Java开发人员应该知道的7种新工具
  8. cacls查看文件权限
  9. sendmail邮件服务器的基本建立过程
  10. hive serde 序列化与反序列化 - 一行数据写入hive表
  11. XSSFWorkbook 设置单元格样式_openpyxl3.0官方文档(25)—— 使用样式
  12. 调用内部类里,在静态类中调用动态方法的问题
  13. 开发 Windows 8 Bing地图应用(4)
  14. 本周ASP.NET英文技术文章推荐[07/22 - 07/28]:VS 2008、.NET 3.5、IronRuby、jQuery、ASP.NET AJAX、IIS7...
  15. (2)python_enumerate
  16. 联想一体机用u盘装linux教程,联想一体机如何用u盘装系统
  17. 读文献——《Very Deep Convolutional Networks for Large-scale Image Recognition》
  18. 09年软件评测师考试下午试题答案
  19. 14个同陌路人匿名聊天在线工具排除你的寂寞和无聊
  20. Mac电脑图片后期处理Lightroom Classic 2022(lrc2022)

热门文章

  1. java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to java.sql.Connection异常问题解决...
  2. js属性-map set
  3. 万无一失,网站的高可用架构
  4. codevs 1038 一元三次方程求解 NOIP2001提高组
  5. POJ 3061  Subsequence   尺取法   挑战146页
  6. ActiveX如何调用引用该ActiveX的网页中的JavaScript函数
  7. Python 取dataframe某一列为特定值
  8. solaris 10 oracle 11g r2安装教程,Oracle 11gR2 on Solaris 10安装技术文档(原版英文)
  9. yolov3 使用darknet的python接口使用
  10. 流水线的效率_自动化生产流水线的使用注意事项