【发布时间】:2014-08-11 06:48:25
【问题描述】:
我正在寻找一种方法来保持对作为服务成员对象的对象/实例的引用。我知道在活动的情况下,我们可以通过提供的onSaveInstance 方法保存它。但是,我找不到任何类似的服务方式。
我可以使用静态对象,但它不安全,因为没有保证,如果下次引用有效,则创建服务。
另一种可能的方式是,我将所有数据存储在存储中,稍后再次创建服务时,我可以从存储中读取数据。然后遍历另一个类提供的信息/数据并找到从存储中读取的信息的相关参考,我认为这在执行时间方面非常昂贵。
所以我正在寻找一种方法来摆脱所有这些过程并在任务/应用程序运行时在内存中保留一个强引用(服务中的对象)。
问候
【问题讨论】:
-
你为什么不尝试使用应用程序类?这将在应用程序运行期间保留数据。像这样的东西stackoverflow.com/questions/4208886/…
-
你为什么不喜欢使用静态引用?如果需要,您可以重新初始化它们......只要进程存在,它们就会一直存在,就像 Application 类一样。
-
@androiddeveloper 根据我的经验,静态变量在关键内存条件下会被销毁(即使任务处于活动状态但其进程或服务被终止)。我将测试 Application 类作为静态对象的替代品
-
@UmerFarooq 如果进程被杀死,则任务和服务被杀死。应用程序的所有内容都被杀死。唯一剩下的可能是您可以通过最近的任务重新打开应用程序。并且它可能发生在低内存情况下是正确的,例如当您打开内存密集型应用程序时。扩展应用程序等同于使用静态引用(就存储变量而言),因为只要进程存在,它就会存在 - 它在进程存在时被实例化。唯一的区别是它在创建 contentProvider 时不能正常工作(它不会创建它的实例)。
-
@UmerFarooq 您甚至可以在此处阅读 Application 类的工作原理(如我所写):developer.android.com/reference/android/app/… 和此处:developer.android.com/reference/android/app。他们说如果你需要一个 singleTon,你通常不需要使用这个类,这也意味着你也不需要它作为静态引用。