gpt4 book ai didi

multithreading - 让主线程休眠

转载 作者:行者123 更新时间:2023-11-29 17:49:17 26 4
gpt4 key购买 nike

我正在设计一个 Android 应用程序,它要求我让 main Thread 休眠一段时间,我知道这会使应用程序卡住并且 UI 将不是可编辑的 Material ,但是,这是我在我的应用程序中需要的,我对此很好,问题是,当用户因此点击UImain Thread 正在休眠时,应用程序崩溃并给我以下 Log:

06-15 13:10:57.620: E/ActivityManager(542): ANR in com.example.myapp (com.example.myapp/.Login)
06-15 13:10:57.620: E/ActivityManager(542): PID: 1339
06-15 13:10:57.620: E/ActivityManager(542): Reason: Input dispatching timed out (Waiting because the touched window has not finished processing the input events that were previously delivered to it.)
06-15 13:10:57.620: E/ActivityManager(542): Load: 0.67 / 0.36 / 0.14
06-15 13:10:57.620: E/ActivityManager(542): CPU usage from 8638ms to 2834ms ago:
06-15 13:10:57.620: E/ActivityManager(542): 2.7% 112/mediaserver: 0.1% user + 2.5% kernel
06-15 13:10:57.620: E/ActivityManager(542): 1.2% 542/system_server: 0.6% user + 0.5% kernel / faults: 10 minor
06-15 13:10:57.620: E/ActivityManager(542): 1% 100/vinput: 0% user + 1% kernel
06-15 13:10:57.620: E/ActivityManager(542): 1% 1339/com.example.myapp: 0.8% user + 0.1% kernel / faults: 19 minor
06-15 13:10:57.620: E/ActivityManager(542): 0.5% 102/local_opengl: 0% user + 0.5% kernel
06-15 13:10:57.620: E/ActivityManager(542): 0.3% 109/surfaceflinger: 0.3% user + 0% kernel
06-15 13:10:57.620: E/ActivityManager(542): 0% 3/ksoftirqd/0: 0% user + 0% kernel
06-15 13:10:57.620: E/ActivityManager(542): 0.1% 56/adbd: 0% user + 0.1% kernel
06-15 13:10:57.620: E/ActivityManager(542): 0% 103/local_gps: 0% user + 0% kernel / faults: 4 minor
06-15 13:10:57.620: E/ActivityManager(542): 0.1% 598/com.android.systemui: 0.1% user + 0% kernel / faults: 1 minor
06-15 13:10:57.620: E/ActivityManager(542): 0% 697/com.android.inputmethod.latin: 0% user + 0% kernel / faults: 5 minor
06-15 13:10:57.620: E/ActivityManager(542): 4% TOTAL: 1.4% user + 2.5% kernel
06-15 13:10:57.620: E/ActivityManager(542): CPU usage from 696ms to 1199ms later:
06-15 13:10:57.620: E/ActivityManager(542): 1.7% 100/vinput: 0% user + 1.7% kernel
06-15 13:10:57.620: E/ActivityManager(542): 2% TOTAL: 2% user + 0% kernel

如何防止我的应用在休眠时忽略任何用户交互?

如果值得一提,我在让 Thread 休眠时捕获了 InterruptedException:

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

最佳答案

在相关的小部件和操作栏项目上调用 setEnabled(false) 以防止它们接受用户输入。然后,在后台运行长时间运行的工作,例如通过 AsyncTask。工作完成后,在相关小部件和操作栏项上调用 setEnabled(true),例如在 AsyncTaskonPostExecute() 中。

请注意,您将需要处理配置更改,以便在您的后台工作正在进行时如果用户旋转屏幕,您将重新禁用小部件和操作栏项目。

此外,请仅禁用与您的后台任务真正相关的小部件和操作栏项目。不要阻止用户在您应用的其他地方导航到不依赖于此工作的地方(帮助屏幕、关于屏幕等)。

使用 ProgressBar 代替或补充“请稍候.. TextView ”可能会更好。

关于multithreading - 让主线程休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com