Do not put everything into onCreate(), try to use AsyncTask class to access content in background.
1. Implement a class to inherent AsynTask class
class RunningAsyncTask extends AsyncTask{ protected void onPreExecute( ) { // system will call this first // do whatever view content modification // just after thread started. bEndThread = false; } protected void onPostExecute( String value ) { // system will call this when thread finished. // do whatever view content modification // before thread finished. SetAddressText ( value ); bEndThread = true; } protected void onProgressUpdate(Integer... values) { // system will call this when publishProgress( ) // is called in doInBackground( ) // do whatever view content modification // when the background process. } protected String doInBackground(Void... params) { // CAN NOT DO any modification of view content // just do any content fetch for longer process time // Call publishProgress((int) ((i / (float) count) * 100)) // giving a chance to update the view during the process time String addStr = getCurrentGPSAddress( ); return addStr; } }
2. In onResume or onCreate to init the thread (never reentry)
protected void onResume(){ super.onResume( ); if( bEndThread == true); new RunningAsyncTask().execute(); }
3. Never Never execute a new AsyncTask when the last one is not finished.