You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Jellyfish运行Java循环异常求助

Android Jellyfish下循环调用Toast异常的解决办法

问题原因

你的代码在主线程中同步执行循环,连续调用Toast.show()会把所有Toast请求加入系统队列,但主线程被同步循环完全阻塞,后续Toast的UI渲染无法正常执行。加上Android Studio Jellyfish对应的AGP或系统对UI线程阻塞的检测更严格,导致只显示到i=3就无反应。

解决方法

方法一:用Handler实现异步循环(推荐)

通过Handler.postDelayed()让每个Toast延迟执行,避免阻塞主线程,保证所有Toast依次显示:

public void newGen(){
    final int[] i = {0};
    Handler handler = new Handler(Looper.getMainLooper());
    Runnable showToastRunnable = new Runnable() {
        @Override
        public void run() {
            if (i[0] <= 10) {
                Toast.makeText(ViewActivity.this, "the value is " + i[0], Toast.LENGTH_LONG).show();
                i[0]++;
                // 间隔2秒触发下一次,和LENGTH_LONG的显示时长匹配
                handler.postDelayed(this, 2000);
            }
        }
    };
    handler.post(showToastRunnable);
}

方法二:复用单个Toast更新内容

如果不需要同时显示多个Toast,可复用同一个Toast对象实时更新文本(注意避免阻塞主线程):

public void newGen(){
    Toast toast = Toast.makeText(ViewActivity.this, "", Toast.LENGTH_LONG);
    // 把循环放到子线程,避免阻塞主线程
    new Thread(() -> {
        for (int i = 0; i <= 10; i++) {
            int finalI = i;
            // 回到主线程更新Toast文本并显示
            runOnUiThread(() -> {
                toast.setText("the value is " + finalI);
                toast.show();
            });
            try {
                // 间隔2秒,保证Toast有足够时间显示
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:52:23