Android意图和startActivity仍然是调用静态方法所必需的吗?
我想我已经知道这个问题的答案了,因为它看起来,呃,会呃,有点牵强。但我正在认真寻找解决办法 假设我有一个活动,称之为Bluetooth Activity,它启动一个Bluetooth后台线程,即使Bluetooth活动消失,线程也会永远运行-是的,它确实会永远运行。此Bluetooth后台线程是一个数据采集线程,它不断收集活动绘制的数据,称之为实时绘图活动。我们可以将plotting方法称为静态方法Plot.plotData() 我的问题是,我无法判断Plot活动何时处于活动状态,因此无法判断何时开始调用Plot.data()。您可能会认为,由于Plot.plotData()是一个静态方法,我可以随时调用它。但事实并非如此。我必须等到绘图通过Intent()和startActivity实例化。否则,Plot的onCreate()方法未被调用,Plot中充满了空指针 我该如何解决这个问题。添加一个静态getter/setter,该getter/setter在运行onCreate之前最初为false 假设我有一个活动,称之为Bluetooth活动,它启动一个Bluetooth后台线程,即使Bluetooth活动消失,线程也会永远运行—是的,它确实会永远运行 它不会,除非您将其放入Android意图和startActivity仍然是调用静态方法所必需的吗?,android,static,static-methods,Android,Static,Static Methods,我想我已经知道这个问题的答案了,因为它看起来,呃,会呃,有点牵强。但我正在认真寻找解决办法 假设我有一个活动,称之为Bluetooth Activity,它启动一个Bluetooth后台线程,即使Bluetooth活动消失,线程也会永远运行-是的,它确实会永远运行。此Bluetooth后台线程是一个数据采集线程,它不断收集活动绘制的数据,称之为实时绘图活动。我们可以将plotting方法称为静态方法Plot.plotData() 我的问题是,我无法判断Plot活动何时处于活动状态,因此无法判断何
服务中。请不要从活动中泄漏线程
请注意,您已经有了这个
我们可以将plotting方法称为静态方法Plot.plotData()
这不应该是一个静态的方法,因为
我的问题是,我无法判断Plot活动何时处于活动状态,因此无法判断何时开始调用Plot.data()
这就是为什么绘图
活动应该负责自己的绘图。服务中的后台线程应仅处理数据收集。您可以通过Messenger
,或通过bindService()
和回调或其他方式,安排将数据从服务
获取到绘图
活动
在Android中,执行数据收集和显示结果的活动的服务设计非常普遍。电子邮件客户端使用服务收集新的电子邮件。提要阅读器使用服务收集最新的提要更新。等等你只是碰巧通过蓝牙收集信息,而这个概念的大多数例子都是通过互联网收集信息
因此,概括一下:使用后台线程(或线程,如果需要,复数),将蓝牙数据采集逻辑移动到服务中。安排服务
在数据到达时将数据传送到绘图
活动。让绘图
活动显示结果。您的方法似乎是倒退的。难道PlotActivity不应该开始策划吗?我发誓我最近几次听到过这个问题+1对于公共软件,-1对于不接受建议的海报…我被指向此代码并要求修改它。其中一个文件长达3300多行,对我来说很难理解。你说:“将你的蓝牙数据收集逻辑移动到一个服务中。”如果可以的话,我会这么做。我正在将代码重构成更小的文件。但据我所知,我的蓝牙数据收集“逻辑”确实是一个线程,我利用它来绘制不断传入的数据(删除最旧的点,添加最新的点,并重新绘制)。当蓝牙活动消失时,线程似乎会挂起绘制数据。这就是你所说的线程泄漏吗?@Eric这是你第一次看到这个特定的问题。这是我第一次专门询问一个简单的传统getter()/setter()是否能够解决检测绘图活动是否处于活动状态的问题。