0

在我的活动,我有大约10 ContentObservers注册到ContentResolver (registerContentObserver)。我在onCreate()Android的内存溢出异常和ContentResolver.registerContentObserver

当在横向和纵向之间切换时,onCreate()会一遍又一遍地被调用(并且我希望这样 - 需要更改布局),但经过几次尝试后,应用程序内存不足并崩溃。

那些观察员不是班级成员,所以他们生活在onCreate()的范围内。

任何想法的人?

(当我评论所有注册时,我没有任何崩溃)。

+0

完成后取消注册,如果要使用,请再次注册。 –

回答

1

注册后,您的观察者比onresult上下文更长,因为它们在contentresolver中被引用。

您需要在注册新内容之前取消注册contentObservers。

+0

为了更精确一点,您应该在onDestroy中取消注册您的内容观察者。 –

+0

在这种情况下,并不完全相同:在onDestroy结束之前,您可以在onCreate中进行多次。这意味着你应该确保你只注册一个观察者 – njzk2

+0

对不起,你是不正确的。每一个Activity的单个实例的onCreate总是与一个onDestroy配对,除非该进程被Android销毁。如果是这种情况,那么您的内容观察员将自动取消注册。当您旋转手机时,会创建一个活动的新实例(调用onCreate),并将旧的实例销毁(调用onDestroy)。 –