Android: 在实体调用 finalize 时插入数据库

Android: insert into database while an entity is invoking finalize

我需要尽可能多地存储用户名和头像url以供其他使用,所以我在userinfo实体的finalize函数中插入到数据库中。这样做不好还是有任何问题,因为我认为当一个对象将被 gc 收集时会调用 finalize,所以在那里做任何事情都是不好的。

代码:

是的,一般来说,实施终结器是一种不好的做法,因为它会减慢垃圾回收速度,尤其是在您将某些内容插入数据库的情况下,这是一个缓慢的操作。因此,假设 GC 执行了一次停止世界操作,并且您要收集该对象的许多实例,您的应用程序将在更长的时间内无法使用。

另请注意,应将终结器实现到 try/finally 块中,以确保无论发生什么,都会调用超级 class 的终结器,如下所示:

@Override
protected void finalize() throws Throwable {
    try {
        // Something here
    } finally {
        super.finalize();
    }
}