本人看的是PDF文档,很多都是直接都是复制粘贴的记录,简单的记录下笔记!

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 { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("----------onCreate------------");
} @Override
protected void onDestroy() {
super.onDestroy();
System.out.println("----------onDestroy------------");
} @Override
protected void onPause() {
super.onPause();
System.out.println("----------onPause------------");
} @Override
protected void onRestart() {
super.onRestart();
System.out.println("----------onRestart------------");
} @Override
protected void onResume() {
super.onResume();
System.out.println("----------onResume------------");
} @Override
protected void onStart() {
super.onStart();
System.out.println("----------onStart------------");
} @Override
protected void onStop() {
super.onStop();
System.out.println("----------onStop------------");
} }

MainActivity

(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; @Override
protected 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() { @Override
public void onClick(View arg0) {
Intent i = new Intent(MainActivity.this, OtherActivity.class);
startActivity(i);
}
});
} @Override
protected void onDestroy() {
super.onDestroy();
Log.v("MainActivity", "----------onDestroy------------");
} @Override
protected void onPause() {
super.onPause();
Log.v("MainActivity", "----------onPause------------");
} @Override
protected void onRestart() {
super.onRestart();
Log.v("MainActivity", "----------onRestart------------");
} @Override
protected void onResume() {
super.onResume();
Log.v("MainActivity", "----------onResume------------");
} @Override
protected void onStart() {
super.onStart();
Log.v("MainActivity", "----------onStart------------");
} @Override
protected void onStop() {
super.onStop();
Log.v("MainActivity", "----------onStop------------");
} }

MainActivity

如下图所示,添加“跳转”按钮,单击按钮会跳转到另外的一个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. 单字节的FIFO缓存(30天自制操作系统--读书笔记)

    从今天起,写一些读书笔记.最近几个月都在看<30天自制操作系统这本书>,书虽说看的是电子书,但可以花钱买的正版书,既然花费了金钱,就总得有些收获. 任何人都不能总是固步自封,想要进步就得学 ...

  2. 《30天自制操作系统》笔记(06)——CPU的32位模式

    <30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...

  3. 《30天自制操作系统》笔记(03)——使用Vmware

    <30天自制操作系统>笔记(03)——使用Vmware 进度回顾 在上一篇,实现了用IPL加载OS程序到内存,然后JMP到OS程序这一功能:并且总结出下一步的OS开发结构.但是遇到了真机测 ...

  4. 《30天自制操作系统》笔记(02)——导入C语言

    <30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ...

  5. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)——hello bitzhuwei's OS! 最初的OS代码 ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以 ...

  6. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】

    转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...

  7. 《30天自制操作系统》笔记3 --- (Day2 上节)完全解析文件系统

    Day2 汇编语言学习与Makefile入门 本文仅带着思路,研究源码里关于文件系统的参数 关于day2主程序部分及更多内容,请看<30天自制操作系统>笔记 导航 发现学习中的变化 源码差 ...

  8. 《30天自制操作系统》笔记4 --- (Day2 下节)了解如何用汇编写操作系统中的HelloWorld

    关于上一节,我测试了发现3e.4c.4e都OK ,4b 4d 4f都进不去系统还把qemu卡死了. 50不会输出HelloWorld,可能需要hex偶数且在0x3e~4f区间吧.上节复制并运行命令如下 ...

  9. 《30天自制操作系统》笔记5 --- (Day3)

    这个专题荒废了许久,今天补点东西 不够准确的小结 用汇编来开发操作系统,就是使用汇编本身的功能再加上BIOS中断提供的功能来完成功能的过程. 汇编本身的功能不够,毕竟没有外部IO,所以通过给多个寄存器 ...

  10. 《30天自制操作系统》笔记2 --- 初步了解汇编产生的二进制(Day1)

    nask.exe应该就是nas kit(nas开发工具的意思),由于这个编译器是作者自己写的,所以这种汇编语言应该是作者改造出来的,所以我叫它nas汇编语言. 作者说nask是模仿nasm语法的,关于 ...

随机推荐

  1. 老外还是喜欢Ubuntu的

    有图为证? 开效果应该是Ubuntu的界面了,当然,不知是不是backtrack. 这里面的Hacker用的电脑都不是水果.是没有给钱么.

  2. 泛函编程(12)-数据流-Stream

    在前面的章节中我们介绍了List,也讨论了List的数据结构和操作函数.List这个东西从外表看上去挺美,但在现实中使用起来却可能很不实在.为什么?有两方面:其一,我们可以发现所有List的操作都是在 ...

  3. [moka同学笔记]bootstrap基础

    1.导航栏的制作 <nav class="nav navbar-default navbar-fixed-top" role="navigation"&g ...

  4. 【OpenCV】OpenCV中GPU模块使用

    CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行:2.传输数据到GPU:3.确定grid,block大小: 4.调用内核 ...

  5. mysql awr v1.0.1发布

    现发布mysql awr v1.0.1 修复问题: 1.galera cluster下flush table/index_statistcs时如果系统中业务ddl频繁可能会导致很多进程处于prepar ...

  6. android onNewIntent

    在Android应用程序开发的时候,从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就 ...

  7. Gulp-前端进阶A-2

    1.js压缩 注意在根目录的package.json文件里在成功安装uglify后要有 "gulp-uglify": "^1.5.4" 才行 var gulp ...

  8. 来自亚马逊CEO Jeff Bezos的20句经验之谈

    英文原文:The 20 Smartest Things Jeff Bezos Has Ever Said 当外界对一个公司的热情有些偏离常态时, 就会出现武断的言论,亚马逊对此就深有感受.2000 年 ...

  9. jQuery中的尺寸及位置的取和设

    1.offset(); 获取位置值: $(selector).offset().left; $(selector).offset().top; 设置位置值: $(selector).offset({t ...

  10. RecyclerView添加头部和底部视图的实现

    ListView是有addHeaderView和 addFooterView两个方法的. 但是作为官方推荐的ListView的升级版RecyclerView缺无法实现这两个方法. 那么如果使用Recy ...