【问题标题】:My Android app's singleton gets re-initialized while app is running我的 Android 应用程序的单例在应用程序运行时重新初始化
【发布时间】:2013-07-20 16:00:25
【问题描述】:

我搜索了 2-3 天来解决我的问题,但我没有找到遇到类似问题的人。基本上,我的应用程序是一个网站的“移动版”,所以我必须存储临时不同的帐户信息,所以我使用了一个 signleton 类,称之为“用户”。然而,在浏览某些 2 个活动时(一个我有一个可扩展列表,另一个是 listview ,就像你有一个购物车(第一个活动)用“商店”(第二个活动)中的元素替换它的空白空间;所以你从一个去另一个,反之亦然几次)。 因此,在前进和后退的过程中(通过 Intent()),单例突然被重新初始化,导致应用程序崩溃。奇怪的事实是,我在 logcat 上没有收到任何错误,它只在 singlotn 调用它的 init() 方法的某个点记录,导致应用程序在之后立即崩溃。另一个奇怪的事情是,我第一次实现这些东西时它没有问题,但现在我已经实现了其他几个活动并添加了所有图形元素(活动和列表元素的背景,许多可绘制对象等)我得到这个问题(只做前面说的操作)。 (我不知道这件事是否相关)我的应用程序使用 J. Feinstein 的滑动菜单(它在几个活动中被实施,例如具有可扩展列表的那个)和 ActionBarSherlock(但我使用自定义操作栏,所以我夸大了我自己的 actionBar 布局)。每个活动都有其滑动菜单,每次在每个活动的 onCreate() 方法上创建。

你需要帮助我的代码或日志事件的每一部分,只要问,我就会放在这里。

非常感谢您的帮助,我真的被这个问题困住了。

【问题讨论】:

    标签: android android-intent singleton actionbarsherlock slidingmenu


    【解决方案1】:

    我猜你想要一些“会话”用户。

    我不知道确切的问题,但是 Android 系统可能会在内存不足时破坏静态数据。

    您可以做的是将一些值(用户、时间戳)存储为偏好值或持久数据(文件、数据库)。另一种方法当然是将所需的用户数据从一个活动传递到另一个活动。

    【讨论】:

    • 感谢 Carl 的快速重播!是的,我需要一个“会话”对象,事实上,我已经读过一个扩展 Application 类的单例非常适合它,因为它在应用程序保持活动之前一直保持活动状态。此外,当我打开最重要的活动时,我会调用几个 Web 服务以便始终更新数据,并始终写入/读取这些数据,我认为将它们放在单例类中会更慢。通过活动传递这些数据我认为这比让它们从所有活动中访问要复杂得多,并且集中它们可以更容易地更新它们。
    • 此外,我的伙伴,他为 iOS 开发相同的应用程序没有这种问题,即使我们有相同的单例。单例对象的管理方式与 iOS 和 Android 不同吗?
    • @Axce 正如我所提到的,Android 系统可能会杀死您的 Activity 之外的一些资源。如果要在活动之间传递参数,请参见此处:stackoverflow.com/a/2091482/747906
    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多