Improvement: (android:screenOrientation="locked") User can't switch orientations while the app is running but it can run in either orientation on Android 4.3+ or the device's preferred orientation (portrait for phones, landscape for tablets) on lower API versions.
Internal refactor: Uses a dynamically registered android.support.v4.content.LocalBroadcastManager to send the query results and android.content.Broadcast Receiver in MainActivity to receive the results. In addition to being my learning and reference for use of Broadcast Receivers (and Intents and IntentFilters). The now @Deprecated DDGObserver interface is still present and DDGQuery works with it, but it isn't active in the code.
Next step: Create a new DDGAsyncQuery class that will extend AsyncTask directly with no need for a wrapper. I should be able to do this now because I know how to handle updating the UI if I am in a worker thread. (At least I think that the looser coupling will enable me to do this from the AsyncTasks doInBackground() method)
Remarks: I tried creating a replacement class for DDGQuery using AsyncTaskLoader rather than AsyncQuery. I was puzzled that the AsyncTaskLoader's doInBackground() never received a callback. I thought it might be some sort of glitch in the support implementation or something that I needed to do specific to the support implementation of AsyncTaskLoader and I wanted to maintain compatibility with Pre-Honeycomb versions of Android, so I gave it up.