所以我有一个奇怪的问题,我不完全确定我应该提供的所有信息,但我会尽我所能 - 如果我需要添加更多信息,请告诉我.我有,当我完成我的一个问题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的调用过程.