有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java(Android)如何捕获应用程序主线程终止(如果它被放在backround中)

嗯,在我的Android应用程序中,很少有处理整个应用程序需求(如服务器请求、数据下载、应用程序内日志收集器和其他需求)的单例对象

所有这些单例对象都有自己的状态并存储一些完整的应用程序数据(如服务器上打开的用户会话或其他)。屏幕上显示的大多数活动在(重新)创建视图期间使用单例数据。另一方面,活动类似于“前景/视图”,单一对象类似于“背景”

有时在应用程序使用期间,用户切换到主屏幕或其他应用程序。 在最后一个活动从屏幕中隐藏后的一段时间,我们让应用程序主线程运行,所有的单例对象都在内存中并在该线程中工作

最后一个问题是,我希望尽可能长时间地将所有单例对象存储在“背景”中。(原因很少,如“初始化所有这些功能可能需要一段时间”()(如果用户在最近的时间返回应用程序,我不希望开始重新初始化)或“一些网络功能需要通过向服务器发出通知来正确完成”…)

但是,有一段时间,当安卓决定,是时候杀死所有没有显示活动的进程了。对于一些免费的记忆,它可能是,或由于坏心情。 它用我所有的单例对象破坏了主应用程序进程

Ans这是我的问题:我需要处理那个时刻——为了保存我的单例对象的内部状态,或者只是为了做日志记录,比如“我被关闭了””——我不知道怎么做。 (例如,在该场景中不调用.finalize()

处理应用程序单例对象“销毁”(而非活动!)的最佳方法是什么

ps:谢谢,抱歉英语不好)


共 (2) 个答案

  1. # 1 楼答案

    保存数据的最简单方法可能是共享首选项

    http://developer.android.com/guide/topics/data/data-storage.html#pref

    现在你说的是,即使周围没有活动,也要尽可能长时间地记住单身汉。这是不可取的,我认为这是不可能的,除非你采取“聪明”的伎俩,你可能认为有效,但最终不会。嘿,你甚至不能保证你的活动不会被操作系统杀死。您当然可以使用任何持久化机制(首选项、文件、数据库等)来持久化单例状态,但这不会很快。在从持久性中读取或从网络中获取数据时,您总是会受到性能损失

  2. # 2 楼答案

    扩展Application并重写其事件处理程序。具体地说,有一个巨大的问题,onLowMemory应该提醒你该清理了

    也就是说,过度使用单例似乎表明设计不好。如果不经常使用某个服务或在数据库中存储状态,但需要持久化,则可能应该使用该服务或在数据库中存储状态