在问这个问题之前,让我告诉你我是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));
}
}
}
答案 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));
}
});
}
我希望如果有效,请告诉我。祝你好运。