杰瑞科技汇

Android Java 基础该怎么学?

Android Java 基础知识体系

第一部分:Android 开发环境与项目结构

开发环境搭建

  • JDK (Java Development Kit): 运行 Java 程序的基础,Android Studio 通常会自带一个,但也可以配置系统 JDK。
  • Android Studio: 官方推荐的 IDE,集成了代码编辑、调试、模拟器、性能分析等所有必要工具。
  • Android SDK (Software Development Kit): 开发 Android 应用所需的工具、库、API 文档和示例代码。
  • AVD (Android Virtual Device): Android 模拟器,用于在没有实体手机的情况下测试应用。

Android 项目结构 (以传统 Java 项目为例)

当你创建一个新项目时,Android Studio 会生成如下关键目录:

Android Java 基础该怎么学?-图1
(图片来源网络,侵删)
  • app/: 应用的主模块。
    • java/: 存放 Java 源代码。
      • com.example.myapp/: 包名,你的所有代码都在这里。
        • MainActivity.java: 应用的主入口界面。
        • MyApplication.java: 自定义 Application 类。
    • res/: (resource) 存放所有非代码资源文件。
      • layout/: XML 布局文件,定义界面的结构(如 activity_main.xml)。
      • drawable/: 图片资源(如 .png, .jpg)。
      • values/: 各种 XML 配置文件。
        • strings.xml: 字符串资源,用于多语言适配。
        • colors.xml: 颜色值定义。
        • styles.xml: 样式和主题定义。
      • mipmap/: 应用图标资源。
      • manifest/: AndroidManifest.xml 文件(应用的全局配置文件)。
    • AndroidManifest.xml: 最重要的配置文件,它声明了应用的包名、组件(Activity, Service等)、权限、硬件需求等。
    • build.gradle (Module: app): 模块的构建脚本,定义了依赖库(如 Android Support 库)、SDK 版本等。

第二部分:四大核心组件

Android 应用由四个核心组件构成,每个组件都有明确的角色。

Activity (活动)

  • 作用: 用户界面的载体,一个屏幕通常对应一个 Activity,一个 App 的登录界面、主界面、设置界面都是不同的 Activity。

  • 生命周期: Activity 有一个从创建到销毁的完整生命周期,理解生命周期至关重要,因为它决定了代码在何时执行。

    • onCreate(): Activity 创建时调用,通常在这里进行初始化工作,如加载布局(setContentView(R.layout.activity_main))、绑定数据等。
    • onStart(): Activity 变为可见时调用。
    • onResume(): Activity 获得焦点,可以与用户交互时调用,这是最活跃的状态。
    • onPause(): Activity 即将进入后台或被半透明覆盖时调用,通常在这里保存临时数据、停止动画等。必须快速执行
    • onStop(): Activity 完全不可见时调用。
    • onDestroy(): Activity 被销毁前调用,释放资源。
    • onRestart(): Activity 从 Stopped 状态重新 Started 时调用。

    简化记忆: 创建 -> onCreate -> onStart -> onResume (可见可交互) 暂停 -> onPause -> onStop (不可见) 销毁 -> onDestroy

    Android Java 基础该怎么学?-图2
    (图片来源网络,侵删)

Service (服务)

  • 作用: 在后台长时间运行的任务,没有用户界面,播放音乐、下载文件、网络请求等。
  • 注意: Service 默认运行在主线程,如果执行耗时操作(如网络请求),需要手动创建新线程,否则会阻塞主线程导致 ANR (Application Not Responding)。
  • 类型:
    • Started Service: 通过 startService() 启动,启动后与启动组件无关,必须手动 stopService() 或在内部 stopSelf() 才能停止。
    • Bound Service: 通过 bindService() 启动,提供一个客户端-服务器接口,允许其他组件(如 Activity)与之绑定、发送请求、获取数据,当所有客户端都解绑后,Service 会自动销毁。

BroadcastReceiver (广播接收器)

  • 作用: 用于接收系统或应用发送的广播消息,它像一个全局的监听器,能让不同组件之间、或组件与系统之间进行通信。
  • 例子:
    • 系统广播:手机开机、电池电量低、网络状态改变。
    • 应用广播:App 更新完成、用户登录成功。
  • 注册方式:
    • 静态注册: 在 AndroidManifest.xml 中声明,这种接收器即使应用没有运行也能接收广播(如开机广播)。
    • 动态注册: 在代码中通过 Context.registerReceiver() 注册,应用退出时需要 unregisterReceiver(),应用不运行时无法接收。

ContentProvider (内容提供器)

  • 作用: 用于统一管理和应用共享数据,它提供了一套标准的接口,让一个应用可以安全地访问另一个应用的数据(如联系人、短信)。
  • 数据存储: 通常使用 SQLite 数据库。
  • 使用场景: 主要用于系统级数据共享,一般应用内部数据共享更倾向于使用 SharedPreferences 或数据库直接操作。

第三部分:UI 布局与交互

布局文件 (XML)

界面布局在 res/layout/ 目录下的 XML 文件中定义,Android 提供了多种布局方式:

  • LinearLayout (线性布局): 子元素垂直或水平排列。
  • RelativeLayout (相对布局): 子元素相对于父容器或其他子元素进行定位,非常灵活,但嵌套过深会影响性能。
  • ConstraintLayout (约束布局): 强烈推荐,通过定义视图之间的约束关系来定位,性能好,可以替代大部分嵌套布局,实现复杂的 UI 界面。
  • FrameLayout (帧布局): 子元素堆叠在一起,后添加的会覆盖前面的,常用于做单个视图的容器,如显示一张图片。
  • RecyclerView (列表布局): 高效显示滚动列表,它只渲染屏幕可见的项,滚动时复用这些项的视图,非常适合长列表。

View 和 ViewGroup

  • View: 所有 UI 组件的基类,如 TextView, Button, ImageView,代表一个可见的 UI 元素。
  • ViewGroup: View 的子类,本身也是一个 View,但它的作用是包含其他 View,并负责它们的布局,如 LinearLayout, RelativeLayout

在 Java 代码中操作 UI

  • findViewById(): 在 Activity 中通过 ID 获取 XML 中定义的 View 对象。
    TextView myTextView = findViewById(R.id.my_text_view);
    Button myButton = findViewById(R.id.my_button);
  • 设置监听器: 为 UI 组件(如 Button)添加点击事件。
    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 点击按钮后执行的代码
            myTextView.setText("Hello, Android!");
        }
    });

第四部分:数据存储

Android 提供了多种数据存储方式,适用于不同场景。

存储方式 描述 特点 适用场景
SharedPreferences 键值对存储,底层是 XML 文件。 简单易用,只能存储基本数据类型(String, int, boolean等)。 存储应用的配置信息、用户设置、登录状态等少量数据。
内部存储 存储在设备内存中,应用私有。 只有本应用可以访问,应用卸载时数据被删除。 存储私有、敏感的临时数据,如缓存。
外部存储 存储在 SD 卡或共享存储区。 其他应用可以访问(需要权限),数据持久存在。 存储下载的文件、图片、视频等公共数据。
SQLite 数据库 轻量级的关系型数据库。 功能强大,支持复杂查询,适合存储结构化数据。 存储大量、结构化的数据,如联系人列表、文章内容。
网络存储 数据存储在服务器上。 数据可跨设备同步,需要网络连接。 云同步、用户数据备份等。

第五部分:线程与网络

主线程与 ANR

  • 主线程 (UI Thread): 负责处理 UI 绘制和用户交互的所有事件。
  • ANR (Application Not Response): 如果在主线程上执行耗时操作(如网络请求、大文件读写、复杂计算),超过 5 秒(对话框是 10 秒),系统就会弹出 ANR 对话框,提示应用无响应。这是必须避免的严重问题

多线程处理耗时任务

  • Thread + Handler: 传统方式,创建新线程执行任务,然后通过 Handler 将结果发送回主线程更新 UI,代码较繁琐,容易出错。
  • AsyncTask: 轻量级的异步类,封装了 Thread 和 Handler,简化了后台任务和 UI 更新的逻辑,但在 Android 8.0 (Oreo) 后被废弃,不推荐在新项目中使用。
  • HandlerThread: 拥有自己的 Looper 的线程,适合处理顺序执行的任务。
  • Executor (线程池): 现代 Android 开发推荐的方式,通过 Executors 创建线程池,管理线程的生命周期,避免频繁创建和销毁线程。
  • RxJava / Kotlin Coroutines: 更高级的异步编程框架,可以更优雅地处理复杂的异步逻辑链。

网络请求

  • HttpURLConnection: Java 自带,轻量级,但使用起来比较繁琐。
  • OkHttp: 目前最流行的网络请求库,高效、简洁,支持异步请求、拦截器等高级功能。
  • Volley: Google 推出的库,适合数据量不大、但网络请求频繁的场景,内存缓存效果好。
  • Retrofit: 强烈推荐,基于 OkHttp,通过注解(如 @GET, @POST)将网络请求接口定义成 Java 接口,自动生成实现,代码极其简洁,易于维护,是目前 Android 网络请求的事实标准。

第六部分:权限管理

从 Android 6.0 (Marshmallow) 开始,引入了运行时权限机制,除了在 AndroidManifest.xml 中声明权限外,对于一些敏感权限(如相机、位置、联系人),应用必须在运行时向用户请求授权。

  • 清单权限: 在 AndroidManifest.xml 中声明。

    Android Java 基础该怎么学?-图3
    (图片来源网络,侵删)
  • 运行时权限: 在代码中动态请求。

    // 检查是否有权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        // 没有权限,请求权限
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_CAMERA);
    } else {
        // 有权限,执行操作
        openCamera();
    }
    // 处理用户授权结果
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE_CAMERA) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                openCamera();
            } else {
                // 用户拒绝了权限
                Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show();
            }
        }
    }

学习路径建议

  1. 环境熟悉: 先学会创建、运行、调试一个 "Hello World" 项目,熟悉 Android Studio 的基本操作。
  2. 掌握 UI 和 Activity: 学会使用 XML 布局,理解 Activity 的生命周期,并通过点击事件改变 UI,这是最基础也是最常用的。
  3. 学习数据存储: 从 SharedPreferences 开始,了解如何保存和读取简单的配置信息。
  4. 深入网络和线程: 理解主线程和 ANR 的概念,学习使用 ExecutorRetrofit + OkHttp 进行网络请求,并确保在后台线程执行。
  5. 学习其他组件: 逐步了解 Service, BroadcastReceiver 的使用场景和实现方式。
  6. 进阶: 学习 Jetpack 组件(如 ViewModel, LiveData, Room),它们是现代 Android 开发的基石,能帮你更好地构建健壮、可维护的应用。

这份基础涵盖了 Android Java 开发的核心,打好这些基础,你就能开始构建功能完整的 Android 应用了,祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇