Note that there are some explanatory texts on larger screens.

plurals
  1. POProgress dialog UI Freezes/Slow
    primarykey
    data
    text
    <p>I have a progress dialog that I use for a part in my program where I do a time intensive operation in the background but when the dialog gets displayed the UI or spinner icon freezes/slow/hesitates making the program appear as if it froze. In my <code>onPostExecute</code> of my <code>AsyncTask</code> I dismiss the dialog.</p> <p>Why would this happen since I am doing all the work in the background?</p> <p>here is my code</p> <pre><code>pDialog = ProgressDialog.show(FullGame.this,"Starting New Game","Please Wait...", true); new StartNewGame().execute(); private class StartNewGame extends AsyncTask&lt;Void,Void,Boolean&gt;{ @Override protected Boolean doInBackground(Void... params) { try{ ContentValues values = new ContentValues(); Cursor c = getContentResolver().query(Games.PART1_URI,new String[] {Games.PART1_NUM}, Games.PART1_GAME_ID+"="+gameID+" AND "+Games.PART1_FRAME_NUM+"="+10,null,null); c.moveToFirst(); String num = c.getString(0); int part1 =0; if(num.equals("-")){ part1=0; }else{ part1=Integer.parseInt(num); } c = getContentResolver().query(Games.PART2_URI,new String[] {Games.PART2_NUM}, Games.PART2_GAME_ID+"="+gameID+" AND "+Games.PART2_FRAME_NUM+"="+10,null,null); c.moveToFirst(); int part2 = 0; if(num.equals("-")){ part2=0; }else{ part2=Integer.parseInt(num); } c = getContentResolver().query(Games.PART3_URI,new String[] {Games.PART3_NUM}, Games.PART3_GAME_ID+"="+gameID,null,null); c.moveToFirst(); int part3 = 0; if(num.equals("-")){ part3=0; }else{ part3=Integer.parseInt(num); } if(part1 == 10){ values.clear(); values.put(Games.STRIKES_FRAME_NUM,10); values.put(Games.STRIKES_BOWLER_ID,bowlerClickedID); values.put(Games.STRIKES_GAME_ID,gameID); getContentResolver().insert(Games.STRIKES_URI, values); } if(part2 == 10){ values.clear(); values.put(Games.STRIKES_FRAME_NUM,10); values.put(Games.STRIKES_BOWLER_ID,bowlerClickedID); values.put(Games.STRIKES_GAME_ID,gameID); getContentResolver().insert(Games.STRIKES_URI, values); } if(((part2+part3) == 10) &amp;&amp; !score.checkSpare(10)){ values.clear(); values.put(Games.SPARES_BOWLER_ID,bowlerClickedID); values.put(Games.SPARES_FRAME_NUM,10); values.put(Games.SPARES_GAME_ID,gameID); getContentResolver().insert(Games.SPARES_URI, values); } if(part3 == 10){ values.clear(); values.put(Games.STRIKES_FRAME_NUM,10); values.put(Games.STRIKES_BOWLER_ID,bowlerClickedID); values.put(Games.STRIKES_GAME_ID,gameID); getContentResolver().insert(Games.STRIKES_URI, values); } c.close(); }catch(Exception e){ Log.d("FullGame",e.toString()); } Date date = new Date(System.currentTimeMillis()); DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); String newDate = df.format(date); ContentValues values = new ContentValues(); values.put(Games.GAMES_BOWLER_ID,bowlerClickedID); values.put(Games.GAMES_TEAM_ID,1); values.put(Games.GAMES_DATE,newDate); values.put(Games.GAME_SEASON, pref.getLong(Preferences.SELECTED_SEASON, 1)); values.put(Games.GAMES_TOURNAMENT_ID, tournamentID); Uri uri = getContentResolver().insert(Games.GAMES_URI, values); gameID = ContentUris.parseId(uri); int gameid = Integer.valueOf(String.valueOf(gameID)); values.clear(); Cursor cName = getContentResolver().query(BowlersDB.CONTENT_URI,new String[] {BowlersDB.FIRST_NAME},BowlersDB.ID+"="+bowlerClickedID,null,null); cName.moveToFirst(); String name = cName.getString(0); for(int i = 0;i&lt;10;i++){ int num = i+1; values.put(Games.NAMES_FRAME_NUM,num); values.put(Games.NAMES_GAME_ID,gameid); values.put(Games.NAMES_NAME,name); getContentResolver().insert(Games.NAMES_URI, values); names(i,name); values.clear(); values.put(Games.PART1_FRAME_NUM,num); values.put(Games.PART1_NUM,"0"); values.put(Games.PART1_GAME_ID,gameid); getContentResolver().insert(Games.PART1_URI, values); values.clear(); values.put(Games.PART2_FRAME_NUM,num); values.put(Games.PART2_NUM,"0"); values.put(Games.PART2_GAME_ID,gameid); getContentResolver().insert(Games.PART2_URI, values); values.clear(); values.put(Games.TOTALS_FRAME_NUM,num); values.put(Games.TOTALS_FRAME_TOTAL,"0"); values.put(Games.TOTALS_GAME_ID,gameid); getContentResolver().insert(Games.TOTALS_URI, values); values.clear(); values.put(Games.POCKETS_BOWLER_ID,bowlerClickedID); values.put(Games.POCKETS_FRAME_NUM,i); values.put(Games.POCKETS_GAME_ID,gameID); values.put(Games.POCKETS_TEAM_ID, teamSelectedID); values.put(Games.POCKETS_TOURNAMENT_ID, tournamentID); values.put(Games.POCKETS_NUM, 0); values.put(Games.POCKETS_SEASON, pref.getLong(Preferences.SELECTED_SEASON, 1)); getContentResolver().insert(Games.POCKETS_URI, values); values.clear(); } values.put(Games.PART3_GAME_ID,gameid); values.put(Games.PART3_NUM,"0"); getContentResolver().insert(Games.PART3_URI, values); cName.close(); part1Array = new int[10]; part2Array = new int[10]; totalsArray = new int[10]; part3 = 0; mPinsUp = new ArrayList&lt;Long&gt;(); mPinsUp.add((long) 1); mPinsUp.add((long) 2); mPinsUp.add((long) 3); mPinsUp.add((long) 4); mPinsUp.add((long) 5); mPinsUp.add((long) 6); mPinsUp.add((long) 7); mPinsUp.add((long) 8); mPinsUp.add((long) 9); mPinsUp.add((long) 10); return true; } protected void onPostExecute(Boolean result){ pDialog.dismiss(); } } </code></pre> <p><strong>UPDATE:</strong> running through the code in debug mode last night it seems to start to do it in the for loop but still all of this is done in a separate thread and I am only inserting values into my database</p> <p><strong>UPDATE 2</strong> if I comment out the for loop the progress dialog gets displayed for less than a second so even though I am doing everything in an <code>AsyncTask</code> the inserts must still run in the UI thread</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload