gpt4 book ai didi

android - 我怎样才能在android中的多个 Activity 之间保持一个模型?

转载 作者:行者123 更新时间:2023-11-29 15:18:25 25 4
gpt4 key购买 nike

我是 Android 开发的初学者,我正在尝试以 MVC 模式编写代码,但我无法理解模型的工作原理。据我所知,每次你开始一个新的 Activity 时,你都无法传递一个模型。据我所知,您每次开始新 Activity 时都必须重新初始化它。我错过了什么吗?我查看了 Parcelable,但如果您将模型设为 Parcelable,您似乎就失去了方法。现在我正在构建一个登录系统,如果用户已经登录,它会在启动时检查我的本地 sqllite 数据库,如果是这样,它会传递给另一个 Activity ,否则它会传递给登录 Activity ,但我想在所有 Activity 中保持用户模型的活力。你有办法做到这一点吗?

最佳答案

您可能还需要考虑对要在 Activity 之间共享的模型数据保持静态引用,这样您就不必在 Activity 之间切换时继续序列化/反序列化模型。如果您的模型很小,您可以使用 Parcelable,但在某些时候,性能可能会成为一个问题。

我正在做一个项目,我们将模型保存在我们可以在整个应用程序中访问的 Singleton 中,虽然我通常讨厌 Singleton,因为它们会使单元测试变得更加困难,但我发现这种方法性能更好与尝试依赖 Android 的序列化机制相比,使用更大的模型。

这是我的意思的一个非常粗略的例子(免责声明:我没有实际运行测试这段代码,但我希望这能说明这个概念):

你可能有一个我称之为模型的单例类

public class Models {

private static Models instance;

private boolean isInitialized = false;

private User user;
private OtherInterestingModel otherInterestingModel;

private Models() {
}

public static synchronized Models getInstance() {
if (instance == null) {
instance = new Models();
}
return instance;
}

public void loadModels() {
if (!isInitialized) {
/*
* One-time model initialization here.
*/
isInitialized = true;
}
}

public User getUser() {
return user;
}

public OtherInterestingModel getOtherInterestingModel() {
return otherInterestingModel;
}
}

在您的 LoginActivity 中,您可以初始化 Models 类,例如,在您的 onCreate() 中:

public class LoginActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Models.getInstance().loadModels();

User user = Models.getInstance().getUser();
OtherInterestingModelData otherData = Models.getInstance().getOtherInterestingModel();

// Do something with the model data...
}

/*
* This might be called after the user enters data and clicks a login button...
*/
private void login() {
startActivity(new Intent(this, AwesomeLoggedInActivity.class));
}
}

一旦用户成功登录到您的应用程序,您的主要 Activity 中可能会有基本相同的代码:

public class AwesomeLoggedInActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Models.getInstance().loadModels();

User user = Models.getInstance().getUser();
OtherInterestingModelData otherData = Models.getInstance().getOtherInterestingModel();

// Do something with the model data...
}
}

请注意,通过使用单例,您可以通过启动主要 Activity 的 Intent 来避免必须序列化模型数据。

关于android - 我怎样才能在android中的多个 Activity 之间保持一个模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com