Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android意图和startActivity仍然是调用静态方法所必需的吗?_Android_Static_Static Methods - Fatal编程技术网

Android意图和startActivity仍然是调用静态方法所必需的吗?

Android意图和startActivity仍然是调用静态方法所必需的吗?,android,static,static-methods,Android,Static,Static Methods,我想我已经知道这个问题的答案了,因为它看起来,呃,会呃,有点牵强。但我正在认真寻找解决办法 假设我有一个活动,称之为Bluetooth Activity,它启动一个Bluetooth后台线程,即使Bluetooth活动消失,线程也会永远运行-是的,它确实会永远运行。此Bluetooth后台线程是一个数据采集线程,它不断收集活动绘制的数据,称之为实时绘图活动。我们可以将plotting方法称为静态方法Plot.plotData() 我的问题是,我无法判断Plot活动何时处于活动状态,因此无法判断何

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

假设我有一个活动,称之为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活动消失,线程也会永远运行—是的,它确实会永远运行

它不会,除非您将其放入
服务中。请不要从
活动中泄漏线程

请注意,您已经有了这个

我们可以将plotting方法称为静态方法Plot.plotData()

这不应该是一个静态的方法,因为

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

这就是为什么
绘图
活动应该负责自己的绘图。
服务中的后台线程应仅处理数据收集。您可以通过
Messenger
,或通过
bindService()
和回调或其他方式,安排将数据从
服务
获取到
绘图
活动

在Android中,执行数据收集和显示结果的活动的服务设计非常普遍。电子邮件客户端使用服务收集新的电子邮件。提要阅读器使用服务收集最新的提要更新。等等你只是碰巧通过蓝牙收集信息,而这个概念的大多数例子都是通过互联网收集信息


因此,概括一下:使用后台线程(或线程,如果需要,复数),将蓝牙数据采集逻辑移动到
服务中。安排
服务
在数据到达时将数据传送到
绘图
活动。让
绘图
活动显示结果。

您的方法似乎是倒退的。难道PlotActivity不应该开始策划吗?我发誓我最近几次听到过这个问题+1对于公共软件,-1对于不接受建议的海报…我被指向此代码并要求修改它。其中一个文件长达3300多行,对我来说很难理解。你说:“将你的蓝牙数据收集逻辑移动到一个服务中。”如果可以的话,我会这么做。我正在将代码重构成更小的文件。但据我所知,我的蓝牙数据收集“逻辑”确实是一个线程,我利用它来绘制不断传入的数据(删除最旧的点,添加最新的点,并重新绘制)。当蓝牙活动消失时,线程似乎会挂起绘制数据。这就是你所说的线程泄漏吗?@Eric这是你第一次看到这个特定的问题。这是我第一次专门询问一个简单的传统getter()/setter()是否能够解决检测绘图活动是否处于活动状态的问题。