I am in the process of making a simple practice Morse code application.
I am trying to make an Image View flash between black and white in the SOS sequence based on Morse. When researching how to achieve this i realized i would have to do this on a separate thread in order to not block the UI thread.
The problem is that i am currently updating the Image View from outside of the UI thread which is stated to be a bad idea. At the moment i am trying to pass the Image View to the worker thread class that contains the logic for the screen flash.
I am new to multi-threading and i am pretty sure i am doing this completely backwards/incorrectly. Does anyone have an advice or ideas as of the best method to go about this?
  new Thread(new Runnable() {
            public void run() {
                sf = new ScreenFlash("...---...", imgV);
                sf.flashScreen();
            }
        }).start();
public ScreenFlash(String message, ImageView imgV){
      this.message = message.replaceAll(".(?!$)", "$0 ");
      this.imgV = imgV;
     }
  public void flashScreen() {
    int offIntervalTime = 50;
    char[] cArray = message.toCharArray();
    for (int i = 0; i < cArray.length; i++) {
        if (cArray[i] == '.') {
            imgV.setBackgroundColor(Color.WHITE);
            try {
                Thread.sleep(50);
            }catch(Exception e)
            {
            }
            imgV.setBackgroundColor(Color.BLACK);
            try {
                Thread.sleep(offIntervalTime);
            }catch(Exception e)
            {
            }
        } else if(cArray[i] == ' ')
        {
            try{
                Thread.sleep(100);
            }catch(Exception e)
            {
            }
        }
        else {
            try{
               imgV.setBackgroundColor(Color.WHITE);
                Thread.sleep(dash);
            }catch(Exception e)
            {
            }
            try{
                imgV.setBackgroundColor(Color.BLACK);
                Thread.sleep(offIntervalTime);
            }catch(Exception e)
            {
            }
        }
    }
 
    