why do you explicitly mark this to run on UI thread? it looks like this method will always be called from the main thread