【发布时间】:2020-03-01 20:15:51
【问题描述】:
我在第二个活动中有一个计时器。我想从主要活动中访问它,所以我将计时器作为公共静态放在第二个活动中,并将“secondActivity.chronometer”放在主要活动中,但是在启动应用程序时它显示chronometer.setbase(long) on a null object reference我检查了xml id是否正确。有谁知道如何解决这个问题?
【问题讨论】:
-
这是一个糟糕的主意,有几个原因,尤其是因为您几乎肯定会通过维护对
View(您的Chronometer)的静态引用来创建内存泄漏。使用Intent或事件总线或其他机制在两个活动之间进行通信(请参阅stackoverflow.com/questions/21393287/…) -
因为我实际上想让我的计时器在使用
Service启动主要活动时在后台运行,它是否还必须使用Intent来访问计时器?不会影响Service吗? -
“在后台”,我认为你的意思是它不可见?在这种情况下,它不需要运行 - 您只需将计时器的“开始时间”存储在某处,然后,当您的计时器可见可见时,使用时间调用
Chronometer#setBase,它将更新为当时和现在之间的正确差异。看看我的回答。 -
所以我必须删除
Intent,因为它只是直接启动第二个活动,而不是让它在不可见的后台运行? -
当然,只要您准备好展示计时器,就可以调用
Intent。否则,您只需将该“开始时间”存储在某处。它可能在内存中,或者您可以将其写入SharedPreferences或其他地方。
标签: android chronometer