返回

Android 生命周期备忘录,第 4 部分:ViewModel、半透明 Activity 和启动模式

Android

各位 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 部分:导航和数据绑定

感谢您的阅读!