要避免內存泄漏,您需要確保在不再需要ContentObserver時正確地取消注冊它。以下是一些建議:
@Override
protected void onDestroy() {
super.onDestroy();
if (mContentObserver != null) {
getContentResolver().unregisterContentObserver(mContentObserver);
mContentObserver = null;
}
}
private WeakReference<ContentObserver> mContentObserverRef;
public void setContentObserver(ContentObserver contentObserver) {
if (mContentObserverRef != null) {
getContentResolver().unregisterContentObserver(mContentObserverRef.get());
}
mContentObserverRef = new WeakReference<>(contentObserver);
getContentResolver().registerContentObserver(Uri.parse("your_uri"), true, mContentObserverRef.get());
}
WeakReference
和lifecycleScope
來自動處理取消注冊。private val contentObserver = object : ContentObserver(null) {
// 重寫onChange方法
}
override fun onCreate() {
super.onCreate()
setContentObserver(contentObserver)
lifecycleScope.launch {
// 當Activity或Fragment生命周期結束時,自動取消注冊ContentObserver
contentObserver.let {
getContentResolver().unregisterContentObserver(it)
}
}
}
遵循這些建議,您可以確保在使用Android ContentObserver時避免內存泄漏。