2

我有一堆用户偏好,它们保存在我的应用程序的单例对象中。示例模型如下所示 -

public class UserContext {
    public static final String WEBSRV_IP = "TRIMMED";
    public static UserContext instance;
    // Contains username, password, if they're valid etc.
    private LoginDataModel loginModel; 
    private ArrayList<FacilityDataModel> model;
    private FilterDataModel filters;

    private UserContext()
    {

    }

    public UserContext getInstance()
    {
        if(instance == null) {
            instance = new UserContext();
        }
        return instance;
    }   
    // Getters and setters
}

所以现在,当用户浏览应用程序时,我创建了一堆活动,通过它们的生命周期,利用这些变量并完成。(例如,在onStart()方法中,我在呈现活动之前检查用户是否已登录)。

onPause()我的问题是,Android 文档似乎建议我在我的方法中备份任何与上下文相关的数据。但是onPause()每次我自己创建一个新活动时也会被调用,备份所有 GlobalVariables 似乎很浪费,只是在下一个活动的onStart()方法中恢复它们。有没有办法确定整个应用程序是否已经进入后台?如果没有,你什么时候真正保存你所有的 Globals?

谢谢,
泰加。

4

3 回答 3

1

我认为每个应用程序的情况都会有所不同。如果您需要保存该活动的状态,onPause() 并不是一个可恶的想法。如果用户移动到您自己的另一个活动然后点击主页按钮怎么办?您的应用程序将通过 onStop() 转换为停止状态。如果他们重新启动您的应用程序,则可以合理地期望(也许)保留以前的状态。

当保存它们有意义时,我会保存它们。例如,我有一个 SMS 应用程序,我让用户在其中保存最后发送的消息。单击发送时,我保存了他们的最后一条消息。我什么都不做 onPause() 或 onStop(),但是当用户期望它完成时,我会完成所有事情。

开发人员传统上讨厌 if 逻辑,但一位聪明的朋友总是提醒我,“if 逻辑在用户的脑海中”。如果我这样做,那么这将发生......在我的情况下; 如果我发送消息,我的消息将被保存。

于 2011-04-20T16:04:58.053 回答
1

我在确定首选项值时保存首选项(使用 SharedPreferences.Editor.commit()),无论是由用户还是由应用程序代码。我还没有遇到过将保存偏好延迟到确定有意义之后的某个时间的情况。

于 2011-04-20T17:37:11.087 回答
0

唯一一次 onPause() 被调用并且 onStop() 未被调用...是如果您的活动在另一个仅部分遮挡它的活动下仍然可见。大多数时候,onStop() 也会被调用,如果你知道在你自己的活动结构中,你总是会完全掩盖其他活动,我会考虑保存在 onStop() 中并在 onStart() 中恢复。

还要记住,一般来说,你在 onPause() 中保存的任何内容都应该在 onResume() 中恢复。onStop() 中保存的内容可能应该在 onStart() 中恢复。如果 onPause() 发生但 onStop() 没有... onStart() 将不会被调用。

我还应该补充一点,我同意 Bill Mote 的说法,即你应该在有意义的时候保存东西。一旦你对 Activity Lifecycle 框架有了深入的了解,你通常可以做出一个不错的选择。

于 2011-04-20T16:06:41.560 回答