【发布时间】:2014-12-10 09:09:31
【问题描述】:
我确实有一个更笼统的问题,没有任何具体代码。我将解释我的应用程序的功能以及我可以监控的方式和问题。也许你们中的一个人有同样的问题,可以引导我解决这个问题。
应用程序:
它通过Bluetooth 读取汽车诊断数据 (OnBoardDiagnostics),并在ListView 中实时显示这些数据。我可以通过“更新按钮”启动更新功能。
如何:
每次通过Bluetooth 接收到一个新值时,一个后台类(处理Stringforming)发送一个Intent 以通知UI 更新ListView。
我的 ListView 的Adapter 类注册了监听BroadcastReceiver,如果它被触发,它将通过notifyDataSetChanged() 通知ListView。
问题:
1.如果我使用WakeLock 来保持屏幕开启,UI 刷新会在大约 1 分钟后变慢。 10分钟。
2.如果我按下电源按钮,屏幕关闭,它仍然会变慢(我可以看到,因为我将值发送到网络服务器)但此外:如果我重新打开屏幕。我看到ListView 停止了大约 20-30 秒,然后以正常速度继续(不再慢)。
所以.. 我认为这是一个非常笼统的问题。我搜索了WakeLock 和睡眠行为,但找不到任何类似的问题。也许你们中的一个可以给我一个提示,问题可能是什么。也许你们中的一个人也有类似的问题。
感谢任何提示!
编辑 1:
也许2.问题的问题是基于我的对象/活动的生命周期。
如果我按下更新按钮,AsyncTask 就会启动,它将数据(JSON,其中包含所有列表项的一个新值)发送到我的 Web 服务器。如果设备屏幕关闭,我仍然每 2 秒获取一次数据。如果我打开屏幕,它会停止这 20-30 秒以及 UI。所以我认为我的用户界面工作正常。更新意图发送正确。
我必须检查我是否仍然在该背景类中收到新值,如上所述。 感谢zapl
谢谢!
【问题讨论】:
-
减速到底是什么?列表滚动缓慢,广播接收器没有接收到尽可能多的事件或其他什么?
-
列表滚动没问题。这更像是我的整个应用程序暂停。
ListView中的 Ne 值不会更新。就像没有发送刷新意图一样。很难调试,因为我需要在车里呆10分钟左右。我希望有人能暗示我必须看的地方。 -
唤醒锁不会减慢设备速度,它们只是阻止睡眠。只要 ui 一直运行顺畅,您的主要活动就很好。如果它是冻结/口吃,这意味着在 ui 线程中阻塞了某些东西。您看到的可能是汽车/诊断适配器的正常行为。 IE。 10 分钟后进入慢速模式。关闭屏幕时,蓝牙可能会断开连接,当您重新打开它时,它会重新连接(这需要 20-30 秒?),然后从头开始。您是否有任何表现不同的类似应用/设备?
-
首先感谢您的建议! BT总是连接的,那不可能是问题。我一直在网络服务器上获取有效数据。如果没有任何联系,我将一无所获/没有变化的价值。但是重新连接的提示让我开始思考我的应用程序生命周期。我将编辑我的问题以明确我的意思。
-
您可能会生成大量对象,这会导致大量垃圾收集。当你启动你的应用程序时,你不会立即看到这个,但是在它运行了一段时间之后。如果您查看 logcat,您应该能够看到垃圾收集器活动(如果您没有过滤 logcat)。
标签: android android-intent android-listview broadcastreceiver android-wake-lock