As things stand, this constructor isn't run on the UI thread, which seems spooky to me. We should probably either construct this on the UI thread or take most of this out of the constructor and put it into run()