移动应用架构设计:MVVM实战(适合零基础初学者的教程)
王者.梁丽.先锋
2025-06-22 00:06
阅读 338
一、开篇:什么是MVVM?它能帮我们做什么?

在移动开发中,MVVM(Model-View-ViewModel) 是一种非常流行的软件架构设计模式。你可以把它想象成一种“搭积木”的方法——每一块都有自己的职责,互不干扰,便于管理和维护。
简单来说:
- Model(模型):处理数据,比如从网络或本地数据库获取内容。
- View(视图):就是你看到的界面,比如按钮、文字、图片等。
- ViewModel(视图模型):负责连接 View 和 Model,把数据显示给 View,也可以接收用户操作并去请求数据。
💡 为什么使用 MVVM?
- 更清晰的代码结构
- 更容易测试和维护
- 支持现代框架的数据绑定功能
二、环境准备:Android Studio + Kotlin 初体验

所需工具:
- Android Studio(推荐最新稳定版)
- JDK(一般安装Android Studio时会自带)
- 模拟器或者真实手机设备
步骤如下:
- 下载安装 Android Studio
- 打开后选择“Start a new Android Studio project”
- 选择模板:“Empty Activity”
- 命名项目,例如
MyMVVMApp - 语言选择 Kotlin
- 其他保持默认,点击Finish等待项目生成
🔧 提示:如果你是Windows系统,可能会需要开启USB调试权限连接真机进行测试。
三、核心概念:用生活化的比喻理解MVVM
我们可以把一个APP看作一间餐厅:

| 角色 | 类比角色 | 说明 |
|---|---|---|
| Model | 后厨厨师 | 负责做菜(处理数据) |
| ViewModel | 服务员 | 接收客人点餐,并告诉厨房怎么做,再端上桌 |
| View | 客户+餐桌 | 显示菜肴(页面展示),接受客户反馈 |
这样分工明确,谁也不会互相干扰。
四、实战项目:构建一个天气预报App
我们要做一个可以输入城市名称、点击按钮查看天气的小App。
Step 1:添加依赖项(在 build.gradle (Module: app) 中添加)
dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
}
同步一下Gradle 👉 Sync Now
Step 2:创建布局文件(activity_main.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editCityName"
android:hint="输入城市名称"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnFetchWeather"
android:text="查询天气"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tvResult"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"/>
</LinearLayout>
Step 3:编写 ViewModel 层
新建文件:app/src/main/java/your/package/name/WeatherViewModel.kt
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class WeatherViewModel : ViewModel() {
// LiveData用于通知UI更新
private val _weather = MutableLiveData<String>()
val weather: LiveData<String> get() = _weather
// 模拟获取天气信息
fun fetchWeather(city: String) {
// 实际项目可以用网络请求代替
val result = "$city 当前温度约 20°C(模拟数据)"
_weather.postValue(result)
}
}
Step 4:修改 MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import your.package.name.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel: WeatherViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 初始化ViewModel
viewModel = ViewModelProvider(this)[WeatherViewModel::class.java]
// 设置监听器
binding.btnFetchWeather.setOnClickListener {
val city = binding.editCityName.text.toString()
viewModel.fetchWeather(city)
}
// 观察数据变化并更新UI
viewModel.weather.observe(this) { result ->
binding.tvResult.text = result
}
}
}
Step 5:运行你的 App 🚀
连接手机或启动模拟器,点击 Run 按钮。你会看到一个输入框和按钮,输入城市名,点击就会显示天气了!
五、常见问题解答(FAQ)
Q1:什么是 LiveData?和 MutableLiveData 有什么区别?
- LiveData:不可变的,只能观察不能赋值。
- MutableLiveData:可变的,可以改变它的值。
就像一个只读文件和一个可编辑文档的区别。
Q2:为什么要用 ViewModel?直接写在Activity不行吗?
如果写在一起,一旦横竖屏切换,Activity会重建,导致数据丢失。而 ViewModel 在配置变化(如旋转屏幕)时不会被销毁,因此更适合保存界面状态。
Q3:能不能不用MVVM,用别的方式?
当然可以!但 MVVM 是目前 Android 官方推荐的最佳实践之一。学习它可以让你更容易上手主流项目和团队协作。
六、学习建议:下一步怎么走?
学完本教程之后,你可以尝试以下方向进一步提升自己:
🧪 进阶技能:
- 学习协程(Coroutine)和 Room 数据库
- 使用 Retrofit 或 Ktor 请求真实天气API(如 OpenWeatherMap)
- 加入 Jetpack Compose 来构建更现代的UI
📚 推荐资料:
- Android 开发官方文档
- 《第一行代码 Android》第3版(郭霖著)
- B站上的 Android 入门视频教程
总结:你已经迈出了重要的一步!

通过本教程,你已经了解了 MVVM 架构的核心思想,并动手完成了一个简单的项目。现在你已经有能力阅读公司项目的代码结构,也能开始自己做一些小应用了!
继续加油,你离成为专业的Android开发者又近了一步 💪!
🎯 想进阶实战?下节课我们讲《Jetpack组件详解与高阶MVVM实战》,记得关注哦!
标签:产品面试题挑战
为你推荐
暂无相关推荐

评论 0