返回
Android 生命周期备忘录,第 4 部分:ViewModel、半透明 Activity 和启动模式
Android
2023-12-24 03:14:52
各位 Android 开发者,
欢迎来到 Android 生命周期备忘录的第 4 部分!在这一部分中,我们将深入探讨 ViewModel、半透明 Activity 和启动模式的世界。
ViewModel
ViewModel 是一个生命周期感知的组件,旨在处理界面无关的数据。它非常适合存储与应用程序的 UI 状态无关的数据,例如用户设置或网络请求的结果。
ViewModel 的生命周期非常简单:它只有一个回调,称为 onCleared。但是,此函数的作用域在 Activity 和 Fragment 中有所不同:
- 在 Activity 中: onCleared 在 Activity 的 onDestroy() 方法中调用。这意味着当 Activity 销毁时,ViewModel 将不再可用。
- 在 Fragment 中: onCleared 在 Fragment 的 onDestroyView() 方法中调用。这意味着当 Fragment 的视图被销毁时,ViewModel 将不再可用。
半透明 Activity
半透明 Activity 是可以在其他 Activity 上显示的 Activity。它们非常适合创建叠加层,例如对话框、提示或菜单。
要创建半透明 Activity,请在 manifest 文件中将其主题设置为 Theme.AppCompat.Translucent。然后,您可以使用以下代码显示半透明 Activity:
Intent intent = new Intent(this, SemiTransparentActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
启动模式
启动模式确定当用户启动 Activity 时系统如何处理 Activity。有四种启动模式:
- 标准: 创建一个新实例 Activity,即使已经存在一个实例也是如此。
- 单例: 如果 Activity 的实例已经存在,则重新使用该实例,否则创建一个新实例。
- 单顶: 如果 Activity 的实例已经存在,则将新实例启动到该实例的顶部,否则创建一个新实例。
- 单任务: 如果 Activity 的实例已经存在,则将新实例启动到该实例的任务中,否则创建一个新任务。
要指定 Activity 的启动模式,请在 manifest 文件中使用 android:launchMode 属性。
示例
以下是使用 ViewModel、半透明 Activity 和启动模式的一个示例:
public class MainActivity extends AppCompatActivity {
private ViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
}
public void showSemiTransparentActivity() {
Intent intent = new Intent(this, SemiTransparentActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
public class SemiTransparentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_semi_transparent);
setTheme(Theme.AppCompat.Translucent);
}
}
结论
我希望本备忘录有助于您更好地了解 ViewModel、半透明 Activity 和启动模式。请随时发表评论或提出问题。
如果您错过了前三部分,请查看以下链接:
- 第 1 部分:Activity、Fragment 和 LifecycleObserver
- 第 2 部分:LiveData、RxJava 和 Flow
- 第 3 部分:导航和数据绑定
感谢您的阅读!