将 Chronometer 设置为 gone visibility 会阻止它工作
Setting Chronometer to gone visibility stops it from working
我有这段代码,它每秒调用一个函数。该函数执行与速度测试进度相关的许多任务。
如您所见,有一行可见性设置为 "gone"。在 Android 8.1.0 中,这会导致 Chronometer 失败。函数 onTimer()
永远不会被调用。在 7.1.1 中,此代码有效并且测试按预期运行。
我需要保留计时器机制,但我不想看到计时器。
我有哪些选择?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.test);
// 1 second timer
Timer = (Chronometer)findViewById(R.id.Chronometer01);
Timer.setVisibility(Chronometer.GONE);
Timer.setOnChronometerTickListener(new OnChronometerTickListener()
{
@Override
public void onChronometerTick(Chronometer arg0)
{
OnTimer();
};
});
Timer.start();
}
A Chronometer
通常不是您用来执行后台任务的东西(通过这样做,您依赖于表示层中的某些东西来执行业务逻辑!)。在不使用 UI 对象的情况下,每 n 秒执行一次后台任务的方法有很多,一种相当普遍接受的方法是使用 Handler
,它可以重复运行 每 n 毫秒包含在 Runnable
中的任务,如下所示:
Handler handler = new Handler();
private Runnable runnable = new Runnable () {
@Override
public void run() {
OnTimer(); // Run your code
handler.postDelayed(this, 1000); // re-run this Runnable object in 1 second
}
}
handler.post(runnable); // run the Runnable object now
我有这段代码,它每秒调用一个函数。该函数执行与速度测试进度相关的许多任务。
如您所见,有一行可见性设置为 "gone"。在 Android 8.1.0 中,这会导致 Chronometer 失败。函数 onTimer()
永远不会被调用。在 7.1.1 中,此代码有效并且测试按预期运行。
我需要保留计时器机制,但我不想看到计时器。
我有哪些选择?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.test);
// 1 second timer
Timer = (Chronometer)findViewById(R.id.Chronometer01);
Timer.setVisibility(Chronometer.GONE);
Timer.setOnChronometerTickListener(new OnChronometerTickListener()
{
@Override
public void onChronometerTick(Chronometer arg0)
{
OnTimer();
};
});
Timer.start();
}
A Chronometer
通常不是您用来执行后台任务的东西(通过这样做,您依赖于表示层中的某些东西来执行业务逻辑!)。在不使用 UI 对象的情况下,每 n 秒执行一次后台任务的方法有很多,一种相当普遍接受的方法是使用 Handler
,它可以重复运行 每 n 毫秒包含在 Runnable
中的任务,如下所示:
Handler handler = new Handler();
private Runnable runnable = new Runnable () {
@Override
public void run() {
OnTimer(); // Run your code
handler.postDelayed(this, 1000); // re-run this Runnable object in 1 second
}
}
handler.post(runnable); // run the Runnable object now