为什么UI命令会导致Android跳过代码行?

时间:2018-09-22 19:45:40

标签: android

我有这段代码:

    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代码运行正常?

编辑:原谅格式。我正在手机上编辑。

0 个答案:

没有答案