Android Intent和startActivity仍然需要调用静态方法吗?

Vin*_*nce -3 static android static-methods

我想我已经知道了这个问题的答案,因为看来,呃,有点牵强.但我正在认真寻找解决方案.

假设我有一个Activity,称之为蓝牙活动,启动蓝牙背景线程,即使蓝牙活动消失,线程也会永远运行 - 是的,它确实会永远运行.这个蓝牙背景线程是一个数据采集线程,它不断地收集由Activity绘制的数据,实时称之为Plot活动.我们可以将绘图方法称为一个名为Plot.plotData()的静态方法;

我的问题是我无法判断Plot活动何时处于活动状态,因此我无法确定何时开始调用Plot.data().你可能会认为,因为Plot.plotData()是一个静态方法,我可以随时调用它.但事实并非如此.我必须等到Plot通过Intent()和startActivity实例化.否则Plot的onCreate()方法尚未调用,Plot充满了空指针.

我该如何解决这个问题.添加一个最初为false的静态getter/setter,直到onCreate运行?

Com*_*are 7

假设我有一个Activity,称之为蓝牙活动,启动蓝牙背景线程,即使蓝牙活动消失,线程也会永远运行 - 是的,它确实会永远运行.

它不会,除非你把它放入Service.请不要泄漏螺纹Activity.

请注意,您已经被告知了这一点.

我们可以将绘图方法称为一个名为Plot.plotData()的静态方法;

这不应该是一种静态方法,正如我之前告诉过你的那样.

我的问题是我无法判断Plot活动何时处于活动状态,因此我无法确定何时开始调用Plot.data().

这就是为什么Plot活动应该对自己的绘图负责.您的后台主题Service应该处理数据收集.你可以安排从获取数据ServicePlot通过活动Messenger,或者通过bindService()和回调,或其他手段.

进行数据收集的服务设计和显示结果的活动在Android中非常普遍.电子邮件客户端使用服务收集新的电子邮件.Feed阅读器使用服务来收集最新的Feed更新.等等.您恰好通过蓝牙收集信息,而此概念的大多数示例将通过Internet收集信息.

因此,回顾一下:Service使用后台线程(或线程,复数,如果需要)将蓝牙数据收集逻辑移动到a .安排ServicePlot活动到达时将数据传递给活动.让Plot活动显示结果.