我们正在真实设备上测试我们的Android应用程序,并注意其中一些应用程序运行2-3小时后偶尔会重新启动。该应用程序包含一个具有3个线程(具有GPS和网络)的服务和两个活动,其中一个是耗费资源的(显示地图)
Logcat没有帮助,因为我们在设备重启之前没有看到任何重要消息。有时设备甚至无法启动,只有电池拆卸才有助于重新启动它。
这些设备基于不同的硬件,在不同国家(主要是PRC,hehe)生产,并使用不同的Android版本。
可能导致设备重启的最常见问题是什么?如何调试它?
答案 0 :(得分:4)
Android中有两种重启:
系统服务器故障。在这种情况下,不会重新启动,但Zygote
会重新启动。常见原因:
ext2
分区的格式不符合以下条件。它导致错误并且/data/
分区以只读方式挂载,这会产生一堆错误。两者都非常罕见,并且可以主要在猴子测试中复制,而不是真实情况。您可以通过使用service_manager
终止adb shell
进程来查看logcat输出示例。
内核恐慌。在那种情况下,设备实际上重新启动。由于内核恐慌发生在Android的图层上,它不会产生任何logcat输出。相反,它会将堆栈跟踪写入控制台。您可以从/dev/kmsg
或从ADB shell中读取它:adb shell dmesg
。
不幸的是,很难读取这些内容,因为在大多数设备上,控制台输出被禁用,每次重启时都会删除kmsg
缓冲区。
P.S。也可能由硬件问题引起重启。在这种情况下,它不太可能找到任何痕迹,但希望这只能在特定设备上再现。
答案 1 :(得分:1)
我有一个类似的问题(也是gps和网络)我忘了将网络更新计时器设置为生产(15分钟),因此设备每15秒更新一次设备过热的声音或更晚(htc欲望)
尽量减少cpu使用(分析)或确保适当的冷却机制
答案 2 :(得分:0)
根据您提供的信息,听起来您最有可能泄漏Thread
。您可以使用DDMS分析thread usage应用程序的执行过程。另一种可能性是你只是内存不足......你也可以使用DDMS来帮助你解决这个问题。
答案 3 :(得分:0)
当GPS接收器打开时,这很可能是一个过热问题。关闭GPS并从手机网络获取位置,该应用程序可以保持数小时的平稳运行。
感谢大家的回应和想法!