Setup: CBL 2.7.1
Code:
package com.couchbase.lite;
abstract class AbstractDatabase {
/*
* ...
*/
/**
* Adds a change listener for the changes that occur in the database with an executor on which the changes will be
* posted to the listener. If the executor is not specified, the changes will be delivered on the UI thread for
* the Android platform and on an arbitrary thread for the Java platform.
*
* @param listener callback
*/
@NonNull
public ListenerToken addChangeListener(@Nullable Executor executor, @NonNull DatabaseChangeListener listener) {
Preconditions.checkArgNotNull(listener, "listener");
synchronized (lock) { // <-- ANR !!
mustBeOpen();
return addDatabaseChangeListenerSynchronized(executor, listener);
}
}
Trace:
at com.couchbase.lite.AbstractDatabase.addChangeListener (AbstractDatabase.java:626)
at com.couchbase.lite.Database.addChangeListener (Database.java:30)
at com.couchbase.lite.AbstractDatabase.addChangeListener (AbstractDatabase.java:610)
at com.couchbase.lite.Database.addChangeListener (Database.java:30)
at com.couchbase.lite.LiveQuery.start (LiveQuery.java:136)
at com.couchbase.lite.LiveQuery.addChangeListener (LiveQuery.java:113)
at com.couchbase.lite.AbstractQuery.addChangeListener (AbstractQuery.java:195)
at com.couchbase.lite.Where.addChangeListener (Where.java:29)
at com.couchbase.lite.AbstractQuery.addChangeListener (AbstractQuery.java:179)
at com.couchbase.lite.Where.addChangeListener (Where.java:29)
Occasionally I see this ANR (Application Not Responding) reported. It seems the lock is never freed and the UI stops responding. I wasn’t able to reproduce this issue.