6

我们正在实际设备上测试我们的 Android 应用程序,并注意到其中一些应用程序在运行 2-3 小时后偶尔会重新启动。该应用程序由一个具有 3 个线程(带有 GPS 和网络)的服务和两个活动组成,其中一个是资源消耗的(显示地图)

Logcat 没有帮助,因为在设备重新启动之前我们没有看到任何重要消息。有时设备甚至无法启动,只有取出电池有助于重新启动它。

这些设备基于不同的硬件,在不同的国家(主要是中国,呵呵)生产并使用不同的 Android 版本。

可能导致设备重启的最常见问题是什么?如何调试它?

4

4 回答 4

3

Android有两种重启方式:

  1. 系统服务器故障。在这种情况下,不会发生重新启动,而是Zygote重新启动。常见原因:

    • 看门狗杀死了一个 system_server 进程,因为它正在运行的服务出现死锁。
    • 系统服务之一发生致命异常。但是,实际原因有时可能是硬件问题。例如,在某些情况下,恢复出厂设置后ext2分区的格式不如下。它会导致错误,并且/data/分区被安装为只读,这会产生一堆错误。
    • 在极少数情况下,看门狗可能会因为高内存和 CPU 使用率而超时。

    两者都非常罕见,主要可以在猴子测试中重现,而不是真实案例。您可以通过service_manager使用adb shell.

  2. 内核恐慌。在这种情况下,设备实际上会重新启动。由于内核恐慌发生在 Android 之外的层上,它不会产生任何 logcat 输出。相反,它会将堆栈跟踪写入控制台。/dev/kmsg您可以从 ADB shell 或从 ADB shell中读取它: adb shell dmesg.

    kmsg不幸的是,在大多数设备上控制台输出被禁用并且缓冲区将在每次重新启动时被擦除,因此很难阅读这些内容。

PS 另外重启可能是硬件问题引起的。在这种情况下,它不太可能找到任何痕迹,但希望这应该只在特定设备上重现。

于 2012-06-29T21:57:52.060 回答
1


我有一个类似的问题(还有gps 和网络)我忘记将网络更新计时器设置为生产(15 分钟),所以设备每 15 秒更新一次使用(分析)或确保适当的冷却机制

于 2012-06-29T21:27:35.023 回答
0

当 GPS 接收器打开时,很可能是过热问题。关闭 GPS 并从手机网络获取位置后,该应用程序可以平稳运行数小时。

感谢大家的回复和想法!

于 2012-07-02T04:52:14.840 回答
0

根据您提供的信息,听起来您很可能泄露了一个Thread. 您可以使用 DDMS 分析应用程序执行过程中的线程使用情况。另一种可能性是您只是内存不足......您也可以使用 DDMS 来帮助您解决这个问题。

于 2012-06-29T20:55:48.150 回答