Java Thread.sleep不会使我的应用程序崩溃
通过在UI线程上调用Java Thread.sleep不会使我的应用程序崩溃,java,android,multithreading,crash,Java,Android,Multithreading,Crash,通过在UI线程上调用Thread.sleep,我希望我的android应用程序崩溃,但事实并非如此 我尝试在UI线程上显式运行它,使用runOnUiThread,但结果是一样的,应用程序冻结但没有崩溃 在UI线程上使用Thread.sleep(6000)时,我是否应该期望应用程序崩溃 public class CrashActivity extends Activity { @Override protected void onResume() { super.onResume();
Thread.sleep
,我希望我的android应用程序崩溃,但事实并非如此
我尝试在UI线程上显式运行它,使用runOnUiThread
,但结果是一样的,应用程序冻结但没有崩溃
在UI线程上使用Thread.sleep(6000)
时,我是否应该期望应用程序崩溃
public class CrashActivity extends Activity {
@Override
protected void onResume() {
super.onResume();
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(50000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
我正在尝试模拟ANR Thread.sleep(毫秒)
“使当前正在执行的线程睡眠(暂时停止执行)指定毫秒数”
意味着
如果在主线程(即UI线程)上调用Thread.sleep()
,它将冻结UI,并导致线程在给定的时间内完全停止执行;所以,若并没有其他线程需要运行,CPU将进入空闲模式。我认为这不会产生ANR
如果某个大型操作要在UI线程上操作,则会发生ANR情况。考虑这个计算例子…
如果您单击按钮并执行如下代码-
public void onClick(View v) {
....
int a = 1;
while(true) {
a++;
}
}
这将导致ANR
。
以下是一些关于ANR的参考资料-
查看此文档,如前所述,Thread.sleep()不会自行使应用程序崩溃。它只会在您作为参数传递的毫秒数内将线程置于睡眠模式 场景1: 您正在主线程中执行Thread.sleep。UI响应停止或冻结。这意味着用户无法与应用程序进行任何交互 如果您的超时时间很高,比如说30分钟,并且您一直试图与应用程序交互,那么操作系统将给您一个强制退出程序的机会 场景2: 您正在另一个线程中执行Thread.sleep(),或者异步执行。您的应用程序将响应您的所有交互。它也不会使您的应用程序崩溃 对于后台任务,您可以使用
只要启动任何需要很长时间才能执行的函数。比如在主活动中加载一个巨大的图像文件等等。我不希望它崩溃,但它会冻结用户界面。为什么你的应用程序会崩溃?你的问题很模糊,没有任何代码。你真的想知道为什么你的应用程序没有崩溃吗?答案是因为它不应该。没有错误的代码。我本来希望Android操作系统停止我的应用程序,因为冻结了UI线程。AFAIK线程。睡眠不会因为你决定调用它而崩溃。我正在尝试模拟ANR,但调用
thread.sleep
,它似乎不会发生。我做了一些关于ANR的研究。编辑了关于我发现的内容的答案。ANR(应用程序N到R对应)是由于在主线程(UI线程)中处理长时间运行的任务。如果主线程停止超过5秒,则会得到ANR。