Wei*_*ung 0 singleton android fragment
我认为单例实例不应该被垃圾收集,但是我维护了一个单例对象,并在初始化时标记它,如下所示:
private static LocalCache instance;
public LocalCache() {
// initialize objects......
}
public static LocalCache getInstance() {
if (instance == null) {
instance = new LocalCache();
Log.e("instance", "new");
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
我发现这个日志在我的应用程序中不止一次出现.更确切地说,我在FragmentActivity中有5个片段.当我按下主页按钮执行某项任务并切换回活动时,单例类似乎被重新分配.我的代码中有什么问题吗?或者我可以阻止重新创建片段吗?我确定我没有为实例分配null.
@Override
protected void finalize() throws Throwable {
Log.e("finalize", "finalize");
}
Run Code Online (Sandbox Code Playgroud)
我也覆盖finalize()它以查看它何时被销毁,但是日志没有出现在第二个"新实例"日志之前.
我的代码中有什么问题吗?
通常,对于单例,您使用synchronized和volatile进行锁定,以确保由于多个线程上的并行调用而不分配多个实例.或者,在您的情况下,只需使用静态初始化程序,因为您getInstance()没有采用实例化所需的任何参数LocalCache.
但是,更有可能的是,此处的问题是您的流程已终止.一旦您不再处于前台,您的流程就可以随时终止.当您的应用程序再次运行时,将创建一个新进程,并且所有静态数据成员最初都将成为null.
| 归档时间: |
|
| 查看次数: |
1025 次 |
| 最近记录: |