java - 计时器停止应用程序

标签 java android

在我的应用程序中,我有一个计时器。但是,当我在计时器内制作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'srun() 方法:

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(gameActivity.this, "Round", Toast.LENGTH_SHORT).show();
            }
        });

它会按预期工作。

关于java - 计时器停止应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48058507/

相关文章:

java - 请求路由到主机 android

java - 有没有一种简单的方法可以在 Eclipse 中单击几下即可启动类的静态函数?

java - 合并排序比较?

java - 不可比较类型 boolean 和 nulltype

java - MainThread 异常上的网络(一个应用程序正在运行,另一个应用程序抛出异常)

android - picasso 的磁盘缓存是如何工作的?

android - RelativeLayout vs OtherLayout 排不上去

android - 我无法在运行时权限中显示 Manifest.permission.CALL_PHONE

java - GTFS 实时提要示例脚本

java - 通知一系列事件完成的监听器(启动同步服务)