3

我正在创建一种文件资源管理器,如果将任何应用程序文件复制到手机/SD 卡,我将在带有对话框主题的活动中向用户显示它。对于每个复制的新“app.apk”,我将应用程序的名称和位置附加到对话框中,并且列表是可滚动的。我的问题是,如果我一次将大约 200 多个应用程序复制到存储中,列表填充会给出强制关闭/等待对话框 (ANR)。如何防止我的应用出现这种 ANR?

4

1 回答 1

6

如果一些大型计算和 UI 尝试同时运行并且需要足够的时间来启动(大约超过 5 秒),那么系统会考虑用户关闭应用程序。

为了解决这个问题,一种选择是将您的操作分配到不同的子线程中,然后在异步线程 (runOnUiThread) 上运行 UI 以调度应用程序任务。

new Thread() {
    @Override
    public void run() {
        try {
            // code runs in a thread
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // code runs in a UI(main) thread
                }
            });
        } catch (final Exception ex) {
        }
    }
}.start();
于 2012-10-12T09:33:15.723 回答