美文网首页
Android 从0到1开发第一个HelloWorld程序

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

作者: StevenHu_Sir | 来源:发表于2020-03-07 16:47 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:Android 从0到1开发第一个HelloWorld程序

          本文链接:https://www.haomeiwen.com/subject/gbwcdhtx.html