在我的应用程序中,我有一个计时器
。但是,当我在计时器
内制作toast
时,应用程序崩溃了。但是当我只增加一个变量时,计时器就会起作用。
这是我的代码:
package com.dev.moritz.colora;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class gameActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_game);
startGame();
}
public void startGame() {
Timer ballMovement = new Timer();
ballMovement.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Round", Toast.LENGTH_SHORT).show();
}
}, 0, 5000);
}
}
我希望任何人都可以帮助我。 莫里茨
最佳答案
原因: 任何在非 UI 线程上运行的任务都无法与 UI 交互。
因此,当您想从计时器任务更新 UI 时,一种方法是使用 runOnUiThread()
来自Activity
类,将这段代码放在你的 TimerTask's
中run()
方法:
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(gameActivity.this, "Round", Toast.LENGTH_SHORT).show();
}
});
它会按预期工作。
关于java - 计时器停止应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48058507/