首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setOnChronometerTickListener()复位时计时器崩溃

setOnChronometerTickListener()复位时计时器崩溃
EN

Stack Overflow用户
提问于 2019-05-02 13:02:21
回答 1查看 179关注 0票数 1

当计时器到达某一时间(在本例中为5s)时,我试图使用setOnChronometerTickListener()重新设置计时器。不过,当我在手机上运行它时,它就会崩溃。我正在使用this quesion的解决方案来重置计时器。

我试过将计时器重置为不同的值,但它仍然在chronometer.setBase(SystemClock.elapsedRealtime());崩溃

我就是这样实现的:

代码语言:javascript
复制
chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
      @Override
      public void onChronometerTick(Chronometer chronometer) {
              if(chronometer.getText().toString().equalsIgnoreCase("00:05")) {
                        // Reset Chronometer
                        chronometer.stop();
                        chronometer.setBase(SystemClock.elapsedRealtime());


              }
      }
});

这是从Logcat获得的错误消息:

代码语言:javascript
复制
2019-05-02 14:47:39.469 13143-13143/com.example.pomodoro_2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.pomodoro_2, PID: 13143
    java.lang.StackOverflowError: stack size 8MB
        at android.widget.Chronometer.updateRunning(Chronometer.java:321)
        at android.widget.Chronometer.stop(Chronometer.java:252)
        at com.example.pomodoro_2.MainActivity$3.onChronometerTick(MainActivity.java:88)
        at android.widget.Chronometer.dispatchChronometerTick(Chronometer.java:347)
        at android.widget.Chronometer.setBase(Chronometer.java:176)

我从这个错误消息中假设我正在溢出堆栈,但我不知道原因,也没有看到类似的错误。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-02 14:32:18

如果在if条件中放置日志,则在00:05之后会看到登录日志。我通过把听者从计时器上移除来阻止它。

代码语言:javascript
复制
chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
      @Override
      public void onChronometerTick(Chronometer chronometer) {
              if(chronometer.getText().toString().equalsIgnoreCase("00:05")) {
                        // Reset Chronometer
                        chronometer.setOnChronometerTickListener(null);
                        chronometer.stop();
                        chronometer.setBase(SystemClock.elapsedRealtime());


              }
      }
});

但是,如果您需要这个侦听器,您可以从Chronometer.OnChronometerTickListener实现您的片段并实现OnChronometerTickListener,如下所示:

代码语言:javascript
复制
  public class MainActivity extends AppCompatActivity implements Chronometer.OnChronometerTickListener {

    private String TAG = "MainActivity";
    Button start;
    Chronometer chronometer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        chronometer = findViewById(R.id.chron);
        start = findViewById(R.id.btn);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chronometer.start();
            }
        });
        chronometer.start();
        chronometer.setOnChronometerTickListener(this);

    }

    @Override
    public void onChronometerTick(Chronometer chronometer) {
        if (chronometer.getText().toString().equalsIgnoreCase("00:05")) {
            // Reset Chronometer
            chronometer.setOnChronometerTickListener(null);
            chronometer.stop();
            Log.d(TAG, "onChronometerTick: stop");

            chronometer.setBase(SystemClock.elapsedRealtime());
            chronometer.setOnChronometerTickListener(this);


        }

    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55953106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档