SHH*_*SHH 11 java static android garbage-collection dalvik
(标题是误导性的,因为垃圾收集器只收集对象,但我发现这个标题更直接)
假设我有一个Android应用程序,在名为Global的类中有一个名为"userid"的静态变量(初始化时为null).
如果我将"userid"变量设置为Android应用程序生命周期的某个值,比如说Global.userid ="myid",那么当Android应用程序还活着时,这个变量是否可能变为null?
换句话说,Android VM是否有可能卸载Global类并由于低内存问题而"杀死"这个全局静态变量而不会杀死整个Android应用程序?
我担心在应用程序运行时userid突然变为null(由于内存不足问题),因此崩溃了整个应用程序.
编辑 我误解了一些概念(在申请流程与活动之间).谢谢你的回答!
Com*_*are 22
如果我将"userid"变量设置为Android应用程序生命周期的某个值,比如说Global.userid ="myid",那么当Android应用程序还活着时,这个变量是否可能变为null?
如果你把它设置为null自己,是的.
换句话说,Android VM是否有可能卸载Global类并由于低内存问题而"杀死"这个全局静态变量而不会杀死整个Android应用程序?
对于正常情况,没有.
如果你玩的定制类装入器,可以想象,有可能在哪些类得到卸载(并因此对它们的任何静态数据成员去情景噗) -我似乎记得有这个情景讨论,但我忘了结论.但是,很少有应用程序应该使用自定义类加载器.
我担心在应用程序运行时userid突然变为null(由于内存不足问题),因此崩溃了整个应用程序.
这不应该发生.
什么可以发生的是,用户在您的应用程序,通过离开HOME应用(或通知,或来电,或近期任务列表等),然后通过近期任务列表后返回到您的应用程序.如果您的进程在不在前台的过程中被终止,那么您的静态数据成员将是null从最近任务列表启动您的活动的时间.由于用户返回的活动可能不一定是您的启动器活动,因此您的应用可能会像静态数据成员自发转动一样null,即使这是因为您的进程已终止并重新启动.
这是需要非常仔细地使用静态数据成员的几个原因之一.
| 归档时间: |
|
| 查看次数: |
2610 次 |
| 最近记录: |