嗯,在我的Android应用程序中,我没有几个能够处理某些整个应用程序需求(例如服务器请求,数据下载,应用程序内日志收集器和其他一些需求)的单例对象。
所有这些单例对象都有其自己的状态,并存储一些完整的应用程序数据(例如在服务器或其他服务器上打开的用户会话)。屏幕上显示的大多数活动在(重新)创建视图时都使用单例数据。换句话说,活动就像“前景/视图”,单身对象就像“背景”。
有时,在使用应用程序期间,用户会切换到主屏幕或其他应用程序。
在屏幕上隐藏最后一个活动之后的一段时间,我们使应用程序主线程运行,并且所有单例对象都驻留在内存中并在该线程中工作。
最后一个是我想要的-只要有可能,就将所有单例对象存储在“背景”中。 (几乎没有原因,例如“初始化所有这些可能要花一些时间”(如果用户在最近的时间回到应用程序中,我不想开始重新初始化)或“某些网络功能需要正确地完成,并向服务器发送通知“ ...)
但是-一段时间后,当android决定时,现在正是杀死所有未显示活动的进程的好时机。免费释放一些内存,可能是由于心情不好,也可能是因为心情不好。
而且它破坏了我所有的单例对象的主要应用程序过程。
Ans是我的问题:我需要处理这一刻-保存我的单例对象的内部状态,或者只是做“我已关闭”这样的日志记录-我不知道该怎么做。
(例如,在这种情况下不会调用.finalize())。
处理应用程序单例对象的销毁(不是活动!)的最佳方法是什么。
ps:谢谢,抱歉英语不好。)
最佳答案
扩展Application并覆盖其事件处理程序。具体来说,onTrimMemory和onLowMemory应该会警告您该进行清理了。
就是说,单例的过度使用似乎表明设计不好。如果状态不经常使用但需要保留,则应该使用服务或将状态存储在数据库中。