我有这段代码:
if (source.size() == 0){
//Toast section
Toast.makeText(context, "Loading...", Toast.LENGTH_LONG).show();
Log.wtf(TAG, "Game.run: Solo Thread run");
//Loop section
while (true){
Log.wtf(TAG, "Game.playRound: Waiting for source to fill...");
try {
Thread.sleep(2000);
} catch (InterruptedException ignored) {}
source = playlistManager.availablePlaylist;
if (source != null) break;
}
Log.wtf(TAG, "Game.playRound: Source filled" + source);
}
最初运行时,Toast无法执行,并且手机上出现黑屏滞后。此块的其他部分正常运行。
然后我尝试在包含
的独立线程中运行Toast部分 Looper.prepare()
具有相似结果的命令。
然后通过一些研究,我决定尝试在一个[p>
runOnUiThread()
命令。在这里变得很有趣;循环部分无法中断,但是一旦我添加了日志行
Log.wtf(TAG, "Game.playRound: source: " + source);
在源声明之后,循环正常中断。吐司仍然无法运行。
由于Toast是一个无法运行的显而易见的命令,我对此进行了注释并再次尝试,这次,跳过的代码行随每次运行而变化。有时无法声明source,因此将其保持为空,有时,可以声明source很好。两次,虽然While循环中断,但源为空。
注意:
1. The sleep() is to prevent too many logs so my Logcat is easier to read.
2. In place of Toast, i have tried setContentView(layout) & AlertDialog
3. I have confirmed that my PlaylistManager has no bug
4. Black Screen lag can be caused when "Loading data from disk" so I run that part of my program in an independent thread in background.
问题:跳过行的原因可能是什么?如何确保我的UI代码运行正常?
编辑:原谅格式。我正在手机上编辑。