wait() 函数在 android studio 中的线程中不起作用

wait() function not working in thread in android studio

在问这个问题之前,让我告诉你我是 android 开发的新手。 我的问题是关于 Threads 和 wait();功能。现在我正在尝试实现每 3 秒更改一次文本颜色的线程,但程序一启动它就崩溃了。这是代码。

package care.client_application;

public class MainActivity extends AppCompatActivity {
   Thread Thread3=null; //Coloring thread
   public TextView Warning;

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

      Warning= (TextView) findViewById(R.id.warning);
      UIHandler = new Handler();  //Initialization of handler

      this.Thread3= new Thread(new Thread3());
      this.Thread3.start();
   }

   class Thread3 implements Runnable{
      @Override
      public void run() {
         Warning.setTextColor(Color.rgb(200,200,0));
         wait(3000);
         Warning.setTextColor(Color.rgb(200,0,0));
      }
   }
}

首先你不能在线程的 运行 方法上更新任何 UI 组件 喜欢你做的

Warning.setTextColor(Color.rgb(200,200,0)); // this wrong way to do this

使用 Handler 执行任何 UI 更新

public class MainActivity extends AppCompatActivity {

    private TextView warningText;
    private final long TIME_TO_CHANGE = 3000;
    private Handler handler = new Handler();
    private int counter = 0;
    private int[] R = {0, 200}, G = {0, 200}, B = {200, 0};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        warningText = (TextView) findViewById(R.id.warning);
        warningText.setTextColor(Color.rgb(0,0,0));
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                updateTextColor();
                handler.postDelayed(this, TIME_TO_CHANGE);
            }
        }, TIME_TO_CHANGE);
    }

    private void updateTextColor(){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                counter = (counter+1)%2;
                warningText.setTextColor(Color.rgb(R[counter],G[counter],B[counter]));
            }
        });
    }

    @Override
    public void onPause(){
        super.onPause();
        handler.removeCallbacksAndRunnables(null);
    }        

}

对需要等待的任务使用处理程序。 Thread.sleep() 在 Android 中不推荐。

I want to change the color of text every 3 seconds

为什么不用 Handler 而不是 Thread

private Runnable task = new Runnable () {
    public void run() {
            //update textview color 
            Warning.setTextColor(Color.rgb(200,200,0));
            mHandler.postDelayed(task, 3000);  //repeat task
    }
};

使用以下方式调用它:

 private Handler mHandler = new Handler();
// call updateTask after 3 seconds
mHandler.postDelayed(task, 3000);

要停止任务:

    @Override
protected void onPause() {
     mHandler.removeCallbacks(task);
     super.onPause();
}

首先,您不应该使用它冻结 ui,这不是一个好方法。 其次,如果你必须这样做,那么你必须使用 运行onuithread 在 运行 上更改 ui 你必须这样做:

class Thread3 implements Runnable{
      @Override
      public void run() {
         getActivity().runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
             Warning.setTextColor(Color.rgb(200,200,0));
            }
        });
         wait(3000);
getActivity().runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
             Warning.setTextColor(Color.rgb(200,0,0));
            }
        });

      }

希望对您有所帮助,如果有效请告诉我。祝你好运。