处理程序可运行中断应用程序



我有一个计时器,它每1秒调度一次,因为我们不能在timertask中烤,我使用了handler.post()。但是这段代码破坏了我的应用程序:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);
    handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            String text = (String) msg.obj;
            sec_view.setText(text);
        }
    };
    MyTimerTask myTask = new MyTimerTask();
    timer = new Timer();
    timer.schedule(myTask, 1000, 1000);
}
Runnable makeToast = new Runnable() {
    public void run() {
        Toast.makeText(null, "qwerty", Toast.LENGTH_LONG).show();
    }
};

class MyTimerTask extends TimerTask {
    public void run(){
        if(0 == --sec){
            handler.post(makeToast);  //breaks there
            timer.cancel();
        }
        Message msg = new Message();
        msg.obj = sec+" sekund";
        handler.sendMessage(msg);
    }
}

我可以用其他东西来从timertask烤面包吗?

当前您正在传递null作为Toast.makeText的上下文。只需传递上下文而不是null来显示toast

Toast.makeText(Your_Activity.this, "qwerty", Toast.LENGTH_LONG).show();

和显示Toast或从timertask运行方法访问UI元素使用runOnUiThread()作为

public void run() {
  Current_Activity.this.runOnUiThread(new Runnable() {
     @Override
     public void run() {
          //show your toast here
       }
    });
}

将toast改为

Toast.makeText(getApplicationContext(), "qwerty", Toast.LENGTH_LONG).show();

之后添加

最新更新