Handling Lengthy Operations in Google's Android, Page 2
Performing Lengthy Operations in Child Threads
You implement the child thread in the setRandomPointsInChildThread function. Basically, a new thread will be created and executed. Within the child thread, a function to emulate the lengthy operations is provided in setRandomPoints, which does nothing but generate a series of random points and delay the process by pausing 50 milliseconds between points. After all the points have been prepared, it will send a message within a unique ID, GUIUPDATEIDENTIFIER, defined by you. A deterministic progress dialog is initiated. The screen shot is illustrated in Figure 2.
void setRandomPoints(boolean modeThreaded) { int delay_in_msecs = 50; int npoints = 120; int r = 0, g = 0, b = 0; Random rand = new Random(); if (!modeThreaded) mypd = ProgressDialog.show(TutorialOnANR.this, "Lengthy Calculations", "Please wait...", false); mypoint = null; mypoint = new MyPoint[npoints]; for (int i = 0; i < npoints; i++) { mypoint[i] = new MyPoint(); mypoint[i].x = rand.nextFloat() * 320; mypoint[i].y = rand.nextFloat() * 240; r = (int)(rand.nextFloat() * 155) + 100; g = (int)(rand.nextFloat() * 155) + 100; b = (int)(rand.nextFloat() * 155) + 100; mypoint[i].c = 0xff000000 | (r << 16) | (g << 8) | b; mypoint[i].sz = (int)(rand.nextFloat() * 10) + 3 // Update the progress dialog mypd.setProgress(10000 * i / npoints); // Emulate the lengthy operations with an intentional // delay here try { Thread.sleep(delay_in_msecs); } catch (InterruptedException e) { } } // Dismiss the progress dialog mypd.dismiss(); } // Do lengthy operations in a child thread private void setRandomPointsInChildThread() { // Start a progress dialog here mypd = ProgressDialog.show(TutorialOnANR.this, "Lengthy Calculations", "Please wait...", false); Thread t = new Thread() { public void run() { setRandomPoints(true); // Send a message to the handler Message message = new Message(); message.what = TutorialOnANR.GUIUPDATEIDENTIFIER; TutorialOnANR.this.myGUIUpdateHandler. sendMessage(message); } }; t.start(); }
Figure 2: Deterministic progress dialog
Page 2 of 4
This article was originally published on July 30, 2008