3.8 KiB
3.8 KiB
Jetpack组件
目录
Lifecycle
Lifecycle 简介
// Lifecycle:生命周期感知组件
// 自动管理生命周期相关的操作
使用方式
// 实现 LifecycleObserver
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
// Activity onResume 时调用
}
}
// 注册观察者
lifecycle.addObserver(new MyObserver());
ViewModel
ViewModel 简介
// ViewModel:保存 UI 相关数据
// 在配置变更时保持数据
使用方式
public class MyViewModel extends ViewModel {
private MutableLiveData<String> data = new MutableLiveData<>();
public LiveData<String> getData() {
return data;
}
public void setData(String value) {
data.setValue(value);
}
}
// Activity 中使用
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.getData().observe(this, data -> {
// 更新 UI
});
LiveData
LiveData 简介
// LiveData:可观察的数据持有者
// 自动更新 UI
// 生命周期感知
使用方式
MutableLiveData<String> liveData = new MutableLiveData<>();
liveData.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
// 数据变化时自动更新
}
});
liveData.setValue("New Value");
Room
Room 简介
// Room:SQLite 数据库抽象层
// 编译时检查
// 支持 LiveData、RxJava
使用方式
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
LiveData<List<User>> getAllUsers();
}
Navigation
Navigation 简介
// Navigation:导航组件
// 简化 Fragment 导航
使用方式
// 导航到目标
Navigation.findNavController(view)
.navigate(R.id.action_fragmentA_to_fragmentB);
WorkManager
WorkManager 简介
// WorkManager:后台任务管理
// 保证任务执行
// 支持约束条件
使用方式
WorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build())
.build();
WorkManager.getInstance(context).enqueue(workRequest);
Paging
Paging 简介
// Paging:分页加载数据
// 自动处理分页逻辑
DataBinding
DataBinding 简介
// DataBinding:数据绑定
// 减少 findViewById
// 自动更新 UI
使用方式
<layout>
<data>
<variable name="user" type="User" />
</data>
<TextView
android:text="@{user.name}" />
</layout>
Jetpack最佳实践
1. 使用 ViewModel 保存数据
// 配置变更时保持数据
2. 使用 LiveData 更新 UI
// 自动更新,生命周期感知
3. 使用 Room 管理数据
// 类型安全,编译时检查
面试常见问题
Q1: ViewModel 的作用?
答案:
- 保存 UI 相关数据
- 在配置变更时保持数据
- 与 Activity/Fragment 生命周期分离
Q2: LiveData 的特点?
答案:
- 可观察
- 生命周期感知
- 自动更新 UI
Q3: Room 的优势?
答案:
- 编译时检查
- 类型安全
- 支持 LiveData、RxJava
最后更新:2024年