我的应用程序正在关闭而没有任何错误消息,并在切换活动大约 20 或 30 次后自动重新启动。我正在通过点击一个按钮来测试这一点,该按钮使用不同的数据重新启动当前活动(一旦到达数据末尾,就会循环回到开头)。该活动是使用FLAG_ACTIVITY_CLEAR_TOP
标志启动的,因此一次在内存中应该只有一个活动实例。如果我设置FLAG_ACTIVITY_NO_HISTORY
问题仍然存在。
当应用程序崩溃时,这会出现在 logcat 输出中:
06-28 19:32:10.472: I/ActivityManager(115): Process com.mypackage.myapp (pid 3718) has died.
06-28 19:32:10.476: I/WindowManager(115): WIN DEATH: Window{406d06e0 com.mypackage.myapp/com.mypackage.myapp.welcome.LoginActivity paused=false}
06-28 19:32:10.480: E/InputDispatcher(115): channel '406ade20 com.mypackage.myapp/com.mypackage.myapp.matchup.MatchUpActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8
06-28 19:32:10.480: E/InputDispatcher(115): channel '406ade20 com.mypackage.myapp/com.mypackage.myapp.matchup.MatchUpActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
06-28 19:32:10.535: I/WindowManager(115): WIN DEATH: Window{406ade20 com.mypackage.myapp/com.mypackage.myapp.matchup.MatchUpActivity paused=false}
06-28 19:32:10.539: I/WindowManager(115): WIN DEATH: Window{407a8230 com.mypackage.myapp/com.mypackage.myapp.fightcard.FightCardActivity paused=false}
06-28 19:32:10.566: I/ActivityManager(115): Start proc com.mypackage.myapp for activity com.mypackage.myapp/.fightcard.FightCardActivity: pid=3915 uid=10053 gids={3003}
06-28 19:32:10.574: I/ActivityManager(115): Low Memory: No more background processes.
通常这会告诉我应用程序正在泄漏内存,但是如果我在 Eclipse 中查看 DDMS 透视图时执行此测试,我可以看到分配的内存是稳定的,实际上即使使用的百分比是,应用程序也会经常崩溃坐在 50% 左右(这是它大部分时间的位置)。堆大小和分配的内存没有增加。
我MAT
在该应用程序上广泛使用过,虽然我之前确实发现了内存泄漏,但我已经解决了这些问题,并且无法再找到该工具的任何其他问题。
我已经能够在运行 Gingerbread 的 Nexus S 上重现此问题,但在运行 4.0.4 的 Galaxy Nexus 上似乎无法重现此问题(但这可能是因为 Galaxy 上的堆更大)。
我错过了什么?