gpt4 book ai didi

java - (Android)如何捕获应用程序主线程终止(如果将其置于后台)

转载 作者:行者123 更新时间:2023-12-02 06:27:57 25 4
gpt4 key购买 nike

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

所有这些单例对象都有自己的状态并存储一些整个应用程序数据(例如服务器或其他服务器上打开的用户 session )。屏幕上显示的大多数 Activity 在(重新)创建 View 期间都使用单例的数据。换句话说, Activity 就像“前景/ View ”,单例对象就像“背景”。

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

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

但是 - 有时,当 Android 决定时,是时候终止所有未显示 Activity 的进程了。可能是为了释放一些内存,或者是心情不好所致。它破坏了我所有单例对象的主应用程序进程。

这是我的问题:我需要处理那个时刻 - 为了保存我的单例对象的内部状态或只是为了制作日志注释,如“我已关闭” - 但我不`不知道该怎么做。(例如,在这种情况下不会调用 .finalize())。

处理应用程序单例对象销毁(而不是 Activity !)的最佳方法是什么。

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

最佳答案

扩展Application并覆盖其事件处理程序。具体来说,onTrimMemory 和 onLowMemory 应该警告您是时候进行清理了。

也就是说,过度使用单例似乎表明设计很糟糕。如果不经常使用但需要保留,您也许应该使用服务或将状态存储在数据库中。

关于java - (Android)如何捕获应用程序主线程终止(如果将其置于后台),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20349016/

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