Betu Raja
Betu Raja

Reputation: 1

runOnUIThread throwing error and crashing app

Well I am trying to create an app but it is giving me an error: Accessibility content change on non-UI thread. Future Android versions will throw an exception.

My java code:

package com.tools.cpuusage;

import androidx.appcompat.app.AppCompatActivity;

//import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;

public class MainActivity2 extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

    public void refresh(View view) {
        ProgressBar p1 = findViewById(R.id.progressBar1);
        ProgressBar p2 = findViewById(R.id.progressBar2);
        ProgressBar p3 = findViewById(R.id.progressBar3);
        ProgressBar p4 = findViewById(R.id.progressBar4);
        ProgressBar p5 = findViewById(R.id.progressBar5);
        ProgressBar p6 = findViewById(R.id.progressBar6);
        ProgressBar p7 = findViewById(R.id.progressBar7);
        ProgressBar p8 = findViewById(R.id.progressBar8);
        ProgressBar p9 = findViewById(R.id.progressBar9);
        ProgressBar p10 = findViewById(R.id.progressBar10);
        ProgressBar p11 = findViewById(R.id.progressBar11);
        ProgressBar p12 = findViewById(R.id.progressBar12);

        int accuracy = 100;

        for (int c = 0; c < 12; c++) {
            int finalC = c;
            MainActivity2.this.runOnUiThread(() -> {
                int memory = (int) ((double) accuracy * (double) ((double) ((Runtime.getRuntime().freeMemory() / 1024) / 1024) / (double) ((Runtime.getRuntime().totalMemory() / 1024) / 1024)));

                if (finalC == 0) {
                    p1.setProgress(0);
                } else if (finalC == 1) {
                    p2.setProgress(78);
                } else if (finalC == 2) {
                    p3.setProgress(78);
                } else if (finalC == 3) {
                    p4.setProgress(78);
                } else if (finalC == 4) {
                    p5.setProgress(memory);
                } else if (finalC == 5) {
                    p6.setProgress(memory);
                } else if (finalC == 6) {
                    p7.setProgress(memory);
                } else if (finalC == 7) {
                    p8.setProgress(memory);
                } else if (finalC == 8) {
                    p9.setProgress(memory);
                } else if (finalC == 9) {
                    p10.setProgress(memory);
                } else if (finalC == 10) {
                    p11.setProgress(memory);
                } else {
                    p12.setProgress(memory);
                }

                try {
                    Thread.sleep(5000);
                } catch (InterruptedException ignore) {}
            });
        }
    }
}

And my xml code:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="50"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintBottom_toTopOf="@id/progressBar2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintBottom_toTopOf="@id/progressBar3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar3"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintBottom_toTopOf="@id/progressBar4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar4"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintBottom_toTopOf="@id/progressBar5"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar5"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintBottom_toTopOf="@id/progressBar6"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar6"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintBottom_toTopOf="@id/progressBar7"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar7"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar8"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/progressBar7" />

    <ProgressBar
        android:id="@+id/progressBar9"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/progressBar8" />

    <ProgressBar
        android:id="@+id/progressBar10"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/progressBar9" />

    <ProgressBar
        android:id="@+id/progressBar11"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/progressBar10" />

    <ProgressBar
        android:id="@+id/progressBar12"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="369dp"
        android:layout_height="55dp"
        android:progress="00"
        android:progressDrawable="@drawable/progress_bar_style"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/progressBar11" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Refresh"
        android:onClick="refresh"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/progressBar12"
        tools:ignore="HardcodedText,OnClick" />

</androidx.constraintlayout.widget.ConstraintLayout>

I inserted runnUIThread() in my code expecting it to be executing without the error and not crashing, but it is still giving errors and crashing.

Please help me fix them

Upvotes: 0

Views: 107

Answers (1)

Pau Guillamon
Pau Guillamon

Reputation: 658

It would be helpful if you provided more information about the actual crash, maybe the Exception thrown by the system.

I would say, remove the call to sleep: Thread.sleep(5000);.

Since this runs on the main thread, this is blocking your app causing an ANR (Application Not Responding).

You need to be mindful about what is executed on what thread. Blocking the main thread on Android is a bad idea ;) .

Upvotes: 0

Related Questions