Android 从0到1开发第一个HelloWorld程序

Android 是一个开源的,基于 Linux 的移动设备操作系统。

Android 开发环境搭建(Mac)

  • 带有英特尔芯片的 Mac OS X10.5.8或更高版本。
  • 需要用到的软件列表
    • Java JDK5 或 以后版本
    • Android SDK
    • Java运行时环境(JRE)
    • Android Studio

快捷键

  • Mac查看已安装JDK版本
/usr/libexec/java_home -V

Android 架构

  • Linux内核:提供了基本的系统功能,比如进程管理,内存管理,设备管理

  • 程序库:包括开源的 Web 浏览器引擎 Webkit ,知名的 libc 库,用于仓库存储和应用数据共享的 SQLite 数据库,用于播放、录制音视频的库,用于网络安全的 SSL 库等

  • android.app - 提供应用程序模型的访问,是所有 Android 应用程序的基石。

  • android.content - 方便应用程序之间,应用程序组件之间的内容访问,发布,消息传递。

  • android.database - 用于访问内容提供者发布的数据,包含 SQLite 数据库管理类。

  • android.opengl - OpenGL ES 3D 图片渲染 API 的 Java 接口。

  • android.os - 提供应用程序访问标注操作系统服务的能力,包括消息,系统服务和进程间通信。

  • android.text - 在设备显示上渲染和操作文本

  • android.view - 应用程序用户界面的基础构建块UI

  • android.widget - 丰富的预置用户界面组件集合,包括按钮,标签,列表,布局管理,单选按钮等。

  • android.webkit - 一系列类的集合,允许为应用程序提供内建的 Web 浏览能力

  • 运行时:使得每一个 Android 应用程序运行在自己独立的虚拟机进程。

  • 应用框架

    • 活动管理者 - 控制应用程序生命周期和活动栈的所有方面。
    • 内容提供者 - 允许应用程序之间发布和分享数据
    • 资源管理器 - 提供对非代码嵌入资源的访问,如字符串,颜色设置和用户界面布局。
    • 通知管理器 - 允许应用程序显示对话框或者通知给用户
    • 视图系统 - 一个可扩展的视图集合,用于创建应用程序用户界面

应用程序组件

AndroidManifest.xml描述了应用程序的每个组件,以及他们如何交互

应用程序中使用的四个主要组件

Activities-UI操作

描述UI,处理用户与屏幕的交互

public class MainActivity extends Activity {
  
}

Services-后台

-处理与应用程序关联的后台操作

运行在后台,执行长时间操作的组件,例如后台播放音乐,不阻塞用户交互

public class MyService extends Service {

}

BroadcastReceivers-消息接收

可以响应从其他应用程序或者系统发来的广播消息

public class MyReceiver  extends  BroadcastReceiver {

}

Content Providers-数据处理

处理数据和数据库管理

通过请求从一个应用程序到另一个应用程序提供数据。这些请求由ContentResolver类的方法来处理。这些数据可以是存储在文件系统、数据库或者其他其他地方。

public class MyContentProvider extends  ContentProvider {

}

附件组件

Fragments

代表活动中的一个行为或者一部分用户界面

Views

绘制在屏幕上的UI元素,包括按钮,列表等。

Layouts

控制屏幕格式,展示视图外观的View的继承。

Intents

组件间的消息连线

Resources

外部元素,例如字符串资源、常量资源及图片资源

Manifest

应用程序的配置文件

Hello World 实例

  • AndroidStudio 创建第一个HelloWorld项目
效果图
  • Android 应用程序剖析

    效果图

Manifest文件

声明所有的组件,这个文件是Android操作系统与你的应用程序之间的接口(如果没有在这个文件中声明你的组件,将无法被操作系统所识别)

例如:

  • andnroid:icon属性指出位于res/drawable-hdpi下面的应用程序图标
  • android:name属性指定一个Activity类子类的全名
  • android:label属性指定用于活动名称的字符串

Layout 文件 布局文件

当应用程序构建它的界面时被引用。你将非常频繁的修改这个文件来改变应用程序的布局

主要活动文件MainActivity.javaJava文件中

这是实际的应用程序文件,将被转化为Dalvik可执行文件并运行。

下面为Hello World应用生成的默认代码 (MainActivity.java)

package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

  • 方法解析
    • R.layout.activity_main引用自res/layout目录下的activity_main.xml文件
    • onCreate()是活动被加载之后众多被调用的方法之一
  • 运行效果如下
效果图
  • R 文件,即自动生成的文件

其他

1.资源访问

你用到的各种静态内容,如位图,颜色,布局定义,用户界面字符串,动画等等。这些资源一般放置在项目的 res/ 下独立子目录中。

组织应用程序资源,指定替代资源,并在应用程序中访问它们

在项目中 res/ 目录里面支持的资源

anim/ 定义动画属性的XML文件。它们被保存在res/anim/文件夹下,通过R.anim类访问
color/ 定义颜色状态列表的XML文件。它们被保存在res/color/文件夹下,通过R.color类访问
drawable/ 图片文件,如.png,.jpg,.gif或者XML文件,被编译为位图、状态列表、形状、动画图片。它们被保存在res/drawable/文件夹下,通过R.drawable类访问
layout/ 定义用户界面布局的XML文件。它们被保存在res/layout/文件夹下,通过R.layout类访问
menu/ 定义应用程序菜单的XML文件,如选项菜单,上下文菜单,子菜单等。它们被保存在res/menu/文件夹下,通过R.menu类访问
raw/ 任意的文件以它们的原始形式保存。需要根据名为R.raw.filename的资源ID,通过调用Resource.openRawResource()来打开raw文件
values/ 包含简单值(如字符串,整数,颜色等)的XML文件。这里有一些文件夹下的资源命名规范。arrays.xml代表数组资源,通过R.array类访问;integers.xml代表整数资源,通过R.integer类访问;bools.xml代表布尔值资源,通过R.bool类访问;colors.xml代表颜色资源,通过R.color类访问;dimens.xml代表维度值,通过R.dimen类访问;strings.xml代表字符串资源,通过R.string类访问;styles.xml代表样式资源,通过R.style类访问
xml/ 可以通过调用Resources.getXML()来在运行时读取任意的XML文件。可以在这里保存运行时使用的各种配置文件

替代资源

需要为特定的设备配置提供替代的资源支持。比如说,你需要为不同的屏幕分辨率提供替代的图片资源.

在运行时,Android 检测当前设备配置,并为应用程序加载合适的资源。

下面是一个例子,指定默认屏幕的图片和高分辨率的替代图片。

MyProject/
   src/
    main/
    java/
       MyActivity.java  
       res/
        drawable/  
            icon.png
            background.png
        drawable-hdpi/  
            icon.png
            background.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml

访问资源

在代码访问资源

当 Android 应用程序被编译,生成一个 R 类,其中包含了所有 res/ 目录下资源的 ID。你可以使用 R 类,通过子类+资源名或者直接使用资源 ID 来访问资源

访问 res/drawable/myimage.png,并将其设置到 ImageView 上,你将使用以下代码:

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
  • R.id.myimageview 来在布局文件中获取定义为 myimageview 的 ImageView
  • R.drawable.myimage 来获取在 res/ 的 drawable 子目录下名为 myimage 的图片

案例2

res/values/strings.xml 有如下定义

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string  name="hello">Hello, World!</string>
</resources>

在 ID 为 msg 的 TextView 对象上使用资源 ID 来设置文本

TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);
在XML中访问

资源文件 res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

在下面的布局文件中使用这些资源来设置文本颜色和文本内容

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" />

2.活动(Activity)

一个具有用户界面的单一屏幕(ViewController),Android 系统初始化它的程序是通过活动中的 onCreate() 回调的调用开始的

活动生命周期图如下:

效果图

方法概述及详解

  • onCreate()在活动第一次创建时调用
  • onStart()在活动为用户可见时被调用
  • onResume()在应用程序与用户开始可交互的时候调用
  • onPause()被暂停的活动无法接受用户输入,不能执行任何代码。当前活动将要被暂停,上一个活动将要被恢复时调用
  • onStop()当活动不在可见时调用
  • onDestroy()当活动被系统销毁之前调用
  • onRestart()当活动被停止以后重新打开时调用

代码

package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;


public class MainActivity extends AppCompatActivity {

    String msg = "Android : ";

    /** 当活动第一次被创建时调用 */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(msg, "The onCreate() event");
    }

    /** 当活动即将可见时调用 */
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(msg, "The onStart() event");
    }

    /** 当活动可见时调用 */
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(msg, "The onResume() event");
    }

    /** 当其他活动获得焦点时调用 */
    @Override
    protected void onPause() {
        super.onPause();
        Log.d(msg, "The onPause() event");
    }

    /** 当活动不再可见时调用 */
    @Override
    protected void onStop() {
        super.onStop();
        Log.d(msg, "The onStop() event");
    }

    /** 当活动将被销毁时调用 */
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(msg, "The onDestroy() event");
    }

}

点击 Android 模拟器上的红色按钮
图片

,它将在窗口中产生如下的事件消息:

07-19 15:01:10.995: D/Android :(866): The onPause() event
07-19 15:01:12.705: D/Android :(866): The onStop() event

点击 Android 模拟器上的菜单按钮
图片

,它将在 窗口中产生如下的事件消息

07-19 15:01:13.995: D/Android :(866): The onStart() event
07-19 15:01:14.705: D/Android :(866): The onResume() event

击Android模拟器上的返回按钮
图片

,它将在窗口中产生如下的事件消息

07-19 15:33:15.687: D/Android :(992): The onPause() event
07-19 15:33:15.525: D/Android :(992): The onStop() event
07-19 15:33:15.525: D/Android :(992): The onDestroy() event
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容