scheduleAtFixedRate崩溃整个应用程序

时间:2015-04-16 08:07:32

标签: java android timer crash task

我正在编写应用程序,它会生成随机数并在Android屏幕上显示它们(一个接一个)。这是活动java片段。

public class Scada extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scada);
    Timer timer1= new Timer();
    timer1.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            TextView myTextView = (TextView) findViewById(R.id.Flow1);
            random flow1=new random();
            myTextView.setText("Flow: " + flow1.random() + " m" + Html.fromHtml("<sup><small>" + "3" + "</small></sup>"));
        }
    },0,9000);

这是随机类(但我认为看起来没问题)

public class random {

    public int random (){
    Random gen1 = new Random();
    int flow1 = gen1.nextInt(100);
    return  flow1;}
}

当我尝试使用Timer app崩溃时。原因是什么?提前谢谢。

1 个答案:

答案 0 :(得分:0)

Timer在后台线程上运行,不允许在后台线程上更改UI。如果您的目标只是每9秒更改一次TextView的内容,则可以使用处理程序。 E.g。

final Runnable r = new Runnable() {
        public void run() {
            TextView myTextView = (TextView) findViewById(R.id.Flow1);
            random flow1=new random();
            myTextView.setText("Flow: " + flow1.random() + " m" + Html.fromHtml("<sup><small>" + "3" + "</small></sup>"));
            myTextView.postDelayed(this, 9000);
        }
    };

并在onCreate中,同样的事情:

TextView myTextView = (TextView) findViewById(R.id.Flow1);
myTextView.postDelayed(r, 9000);