Создал приложение API 14: Android 4.0, а на версии Androi 7.1 и выше приложение вылетает, пишет произошел сбой


import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    private LinearLayout b_1, b_2, b_3;
    private Button btn_start;
    private boolean start_stop = false;
    private int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b_1 = findViewById(R.id.light_bulb_1);
        b_2 = findViewById(R.id.light_bulb_2);
        b_3 = findViewById(R.id.light_bulb_3);
        btn_start = findViewById(R.id.btn_start);
    }

    public void onClickStart(View view) {
        if (!start_stop) {
            btn_start.setText("Stop");
            start_stop = true;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (start_stop) {
                        counter++;
                        switch (counter) {
                            case 1:
                                b_1.setBackgroundColor(getResources().getColor(R.color.green));
                                b_2.setBackgroundColor(getResources().getColor(R.color.grey));
                                b_3.setBackgroundColor(getResources().getColor(R.color.grey));
                                break;
                            case 2:
                                b_1.setBackgroundColor(getResources().getColor(R.color.grey));
                                b_2.setBackgroundColor(getResources().getColor(R.color.yellow));
                                b_3.setBackgroundColor(getResources().getColor(R.color.grey));
                                break;
                            case 3:
                                b_1.setBackgroundColor(getResources().getColor(R.color.grey));
                                b_2.setBackgroundColor(getResources().getColor(R.color.grey));
                                b_3.setBackgroundColor(getResources().getColor(R.color.red));
                                counter = 0;
                                break;
                        }
                        try {
                            Thread.sleep(3000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }else{
            start_stop = false;
            btn_start.setText("Start");
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        start_stop = false;
    }
}```

Ответы (1 шт):

Автор решения: AndreyPetrus

Ошибка в том что вызывал вью элементы не в главном потоке.

   case 1:
     MainActivity.this.runOnUiThread(new Runnable() {
        @Override
    public void run() {
       b_1.setBackgroundColor(getResources().getColor(R.color.green));
       b_2.setBackgroundColor(getResources().getColor(R.color.grey));
       b_3.setBackgroundColor(getResources().getColor(R.color.grey));
       }
     });
       break;
   case 2:
     MainActivity.this.runOnUiThread(new Runnable() {
        @Override
    public void run() {
       b_1.setBackgroundColor(getResources().getColor(R.color.grey));
       b_2.setBackgroundColor(getResources().getColor(R.color.yellow));
       b_3.setBackgroundColor(getResources().getColor(R.color.grey));
       }
     });
       break;
   case 3:
     MainActivity.this.runOnUiThread(new Runnable() {
        @Override
    public void run() {
       b_1.setBackgroundColor(getResources().getColor(R.color.grey));
       b_2.setBackgroundColor(getResources().getColor(R.color.grey));
       b_3.setBackgroundColor(getResources().getColor(R.color.red));
       }
     });
    counter = 0;
    break;
    }```
→ Ссылка