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

时间:2017-03-16 10:53:03

标签: android multithreading java-threads

在问这个问题之前,让我告诉你我是android开发的新手。 我的问题是关于线程和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));
      }
   }
}

4 个答案:

答案 0 :(得分:1)

*/backup-script.sh

将处理程序用于需要等待的任务。 Android中不建议使用Thread.sleep()。

答案 1 :(得分:1)

  

我想每3秒更改一次文字颜色

为什么不使用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();
}

答案 2 :(得分:0)

首先,您无法在线程的Run方法上更新任何UI组件 喜欢你的行为

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

使用处理程序执行任何UI更新

答案 3 :(得分:0)

首先,你不应该使用它冻结ui,这不是一个好方法。 第二,如果你必须这样做,那么你必须使用runonuithread来改变运行时的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));
            }
        });

      }

我希望如果有效,请告诉我。祝你好运。