【问题标题】:App is slowing down [General]应用程序变慢 [常规]
【发布时间】: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


【解决方案1】:

除了我检查的所有可能性之外,我发现了这篇文章:

AsyncTasks for long running Operations

简短:如果您在非常长时间运行的操作(>20 分钟)中使用 AsyncTasks,则需要牢记一些要点。我的问题是,我使用 AsyncTask 作为内部类。很长一段时间后,当创建 Task 的 Activity 被销毁时,AsyncTask 仍然保留着这个 Activity 的引用。

使用上面文章中描述的总线后,UI 工作正常!!

所以,如果其他人注意到您的应用程序的性能问题,我推荐那篇文章。

感谢所有其他提示! 玩得开心编码!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2012-10-12
    • 2020-04-09
    • 2017-04-27
    相关资源
    最近更新 更多