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 有如下定义



    Hello, World!

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

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

资源文件 res/values/strings.xml



   #f00
   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

你可能感兴趣的:(Android 从0到1开发第一个HelloWorld程序)