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
-~----------~----~----~----~------~----~------~--~---

Reply via email to