android - Android Studio Timer 任务在启动时使应用程序崩溃
问题描述
public class MainActivity extends AppCompatActivity {
private TextView timerTextView;
private Button pauseStartBtn;
private Button resetBtn;
private Button productiveBtn;
private CountDownTimer countDownTimer;
private Boolean run;
Timer timer = new Timer();
private long timeMS = 0;
private long seconds = 0;
private long minutes = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timerTextView = findViewById(R.id.timerTextView);
pauseStartBtn = findViewById(R.id.pauseStartBtn);
resetBtn = findViewById(R.id.resetBtn);
productiveBtn = findViewById(R.id.productiveBtn);
startUp();
}
TimerTask taskUp = new TimerTask() {
@Override
public void run() {
if (run){
timeMS++;
seconds = 0;
minutes = timeMS / 60;
if (timeMS < 60) {
seconds = timeMS;
} else seconds = timeMS - minutes * 60;
String form = String.format("%02d:%02d", minutes, seconds);
timerTextView.setText(form);
}
}
};
public void startUp(){
timer.scheduleAtFixedRate(taskUp,1000,1000);// change period back to 1000
}
}
无论如何,这就是整个代码,每当我运行应用程序时,它都会立即崩溃。
如果重要的话,我正在尝试创建的应用程序是一种计时器,当我按下按钮时,它会使用我从计时器获得的时间来运行计时器,一旦计时器达到 00:00,它就会继续作为计时器,我将其转换为计时器,依此类推。
我仍处于早期阶段,但我想做的是使用 TimerTask 创建一个基本的计时器,并且由于某种原因,当我运行应用程序时它会崩溃。任何帮助是极大的赞赏!
编辑:
原木猫
2020-04-09 18:25:46.428 5761-5870/? D/PowerKeeper.AppBgIdle: setUidState, uid = 10298 allow = false 2020-04-09 18:25:50.569 4911-4911/? W/AppStateLoggerT: type=1400 audit(0.0:66626): avc: denied { read } for name="osrelease" dev="proc" ino=6324986 scontext=u:r:untrusted_app_27:s0:c165,c256,c512, c768 tcontext=u:object_r:proc:s0 tclass=文件许可=0
解决方案
TimerTask
回调在主(UI)线程外执行,而 UI 调用setText
需要在 UI 线程上。您应该将调用包装在调用中setText
,以便timerTextView.post(...)
在 UI 线程上调用它。
推荐阅读
- sql - SQL Server 对奇数 ASC 和偶数 DESC 排序
- c# - Jquery DataTables:无法将基于类的变量传递给 MVC 控制器
- jasper-reports - iReport - 创建包含不同日期数据的日历报告
- c++ - 事件框中图像的文件名
- c++ - 为什么在初始化 SDL 之前在 SDL 中声明一个指针?
- php - Laravel 文件存储:如何存储(解码)base64 图像?
- javascript - Phaser 2.8.1 如何从屏幕的任意位置拖动精灵?
- mysql - 表中的 MySQL 复杂连接
- .net - Outlook中的ActivateTab如何
- javascript - Laravel flash 消息无法使用关闭按钮关闭,并且在一段时间内无法自行关闭