Search code examples
javaandroidmultithreadingrunnable

How can I enable to stop MY running code?


I have a long operation running in the background, like uploading stuff, converting images, audio, video, etc. I would like to stop/cancel them if the user requested to stop the operation altogether.

How can accomplish this? Is there a design pattern for this?

Note: Some of the running code can be canceled and some can't. How do I find a compromise around that?

EDIT: I should have said that I want the operation to stop immediately.


Solution

  • (I'm assuming you're already performing the background work in a separate thread.)

    Basically, you keep a shared boolean flag which the UI thread can set and the background thread periodically reads. When the flag says "stop", you stop :)

    Note that the flag should be volatile or you should use a lock in order to make sure that the background thread definitely "sees" a change written from the UI thread.

    It's relatively crude and feels a bit "manual" but it means you don't risk instability through aborting half way through an operation, unlike approaches such as Thread.stop().