所以我有一个奇怪的问题,我不完全确定我应该提供的所有信息,但我会尽我所能 - 如果我需要添加更多信息,请告诉我.我有,当我完成我的一个问题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()之外的所有内容 - 问题仍然存在.它不与任何其他活动,但这个发生,但有什么可这一个.:/
WAY1:
@Override
protected void onPause() {
super.onPause();
// do something urgent
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
WAY2:
@Override
protected void onPause() {
// do something urgent
doSomething();
super.onPause();
}
Run Code Online (Sandbox Code Playgroud)
所不同的是调用顺序doSomething()和super.onPause().当我使用WAY1时,如果doSomething()成本太高,我会得到错误:W/ActivityManager( 4347): Activity pause timeout for ActivityRecord.
pause timeout如果我使用WAY2,我会避免错误吗?
我检查了AOSP,但是我很难理解Activity的调用过程.