kco*_*ock 9 performance android android-activity android-activityrecord
所以我有一个奇怪的问题,我不完全确定我应该提供的所有信息,但我会尽我所能 - 如果我需要添加更多信息,请告诉我.我有,当我完成我的一个问题Activity
,并返回到前一个Activity
(或一个新的启动它Intent
-这个问题似乎在整理为中心Activity
)的UI性能急剧下降约六,七秒钟,然后返回到正常.
从LogCat
,此警告始终显示:
07-11 22:09:42.594: W/ActivityManager(292): Launch timeout has expired, giving up wake lock!
07-11 22:09:42.601: W/ActivityManager(292): Activity idle timeout for ActivityRecord{42bf6e00 com.kcoppock.sudokubeta/com.kcoppock.sudoku.SudokuBoardActivity}
Run Code Online (Sandbox Code Playgroud)
一旦活动超时,UI性能就会恢复正常.在那之前,它非常缓慢.我没有可以阻止主线程的代码,我甚至已经注释掉了我的整个onPause()
方法,看它是否有任何区别,但事实并非如此.
在Activity
没有任何产卵后台线程,不执行任何网络活动,它具有唯一的磁盘访问的一些访问SharedPreferences
.我之前能够找到的问题是关于空闲超时HistoryRecord
,而不是ActivityRecord
.
任何想法会导致什么?或者我如何确定阻止UI线程的内容,如果发生了什么?
编辑:好的,只是尝试注释掉除super.onCreate()和setContentView()之外的所有内容 - 问题仍然存在.它不与任何其他活动,但这个发生,但有什么可这一个.:/
kco*_*ock 12
哦,geez.在试验和错误之外很难诊断的其中一件事,但我已经弄明白了.作为参考,如果其他人有这个问题,它归结为我的布局中的自定义视图.我ViewTreeObserver.OnGlobalLayoutListener()
在布局传递后添加了一个布局修改,但是在该监听器中我修改了布局,从而导致了另一个布局,实际上创建了一个无限循环(但不知何故不会导致ANR).我的解决方案是这样的:
private class BoardLayoutListener implements OnGlobalLayoutListener {
@Override
public void onGlobalLayout() {
//...do stuff here
//REMOVE this listener so that you don't repeat this forever
ViewTreeObserver obs = SudokuBoard.this.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案非常具有讽刺意味,考虑到我在StackOverflow上的第二高评价答案专门处理这个问题.:P
叹
归档时间: |
|
查看次数: |
19129 次 |
最近记录: |