Hi.
My activity has a thread that performs a long-running operation and
then notifies the UI thread via the activity handler.
When the activity is destroyed (no matter why), I want the thread and
its notification to die as quickly as possible.
Based on the "Handling Expensive Operations in the UI Thread" FAQ,
here is the outline of my solution:
public class MyActivity extends Activity {
[ . . . ]
// Need handler for callbacks to the UI thread
final Handler mHandler = new Handler();
private boolean destroyed = false;
private Thread mThread = null;
// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
public void run() {
if (!destroyed) updateResultsInUi();
}
};
[ . . . ]
protected void startLongRunningOperation() {
// Fire off a thread to do some work that we shouldn't do
directly in the UI thread
mThread = new Thread() {
public void run() {
mResults = doSomethingExpensive();
mHandler.post(mUpdateResults);
}
};
t.start();
}
private void updateResultsInUi() {
// Back in the UI thread -- update our UI elements based on
the data in mResults
[ . . . ]
}
@Override
protected void onDestroy() {
super.onDestroy();
destroyed = true;
mHandler.removeCallbacks(mUpdateResults);
if (mThread != null) {
Thread aux = mThread;
mThread= null;
aux.interrupt();
}
}
}
Is this "good enough"? Does somebody know a better way to implement
this? Is the "destroyed" boolean necessary (isFinishing is not
enough)?
Thank you!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---