给定代码在doInBackground()中工作。 while循环总是正确但我不知道它如何调用catch中的其他方法。
有人可以向我解释这项技术,我们如何从这项技术中获益。我不知道如何以及何时离开循环。
doInBackground
if(isRunning)
{
while (true) //this loop should run always.
{
try
{
Thread.sleep(1L);
}
catch (InterruptedException ex)
{
Log.e("Testing Interuption", "error=" + ex.getMessage());
// some working here is also running
}
}
}
可以在之后调用任何声明吗?我的意思是它也可以退出while循环。
修改
什么时候发生Interuption.It意味着另一个AsyncTask正在调用Thread.sleep();它会中断(意味着去抓)。我是对的吗?
我打电话给Multiple AsyncTasks
设置CameraPreview using Bitmap
。
@TargetApi(11)
public void start()
{
if (Build.VERSION.SDK_INT >= 11)
{
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Void[0]);
return;
}
execute(new Void[0]);
}
答案 0 :(得分:1)
while (true)
语句将永远不会结束,因为没有什么可以突破循环,所以不,它不能脱离while循环。 (取决于// some working here is also running
中的内容。)
如果另一个线程向该线程发送中断,则执行catch
语句中的代码。当代码在catch
下执行时,while
循环再次重新启动。
如果您希望在收到InterruptedException
时退出while循环,请在break;
内添加catch
语句。
答案 1 :(得分:0)
它可以调用任何东西,只要你突破你的循环,就像这样:
if (isRunning) {
while (true) //this loop should run always.
{
try {
Thread.sleep(1L);
}
catch (InterruptedException ex) {
Log.e("Testing Interuption", "error=" + ex.getMessage());
// some working here is also running
break; // <--
}
}
doStuffAfterWhileLoop();
}
答案 2 :(得分:0)
我写了一些代码,可以帮助你理解它是如何工作的。
public class Test2 {
boolean doBreakOut = false;
public Test2() {
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) // this loop is running while
// !(doBreakOut == true && isInterrupted()).
{
try {
Thread.sleep(1L);
} catch (InterruptedException ex) {
// this is executed when interrupt() is called.
if (doBreakOut) {
break;
}
System.out.println(("Testing Interuption -> "
+ "error=" + ex.getMessage()));
}
}
System.out
.println("did leave loop, threat will shut down now.");
}
};
try {
Thread threat = new Thread(runnable);
threat.start();
// Thread.sleep(x) makes the main thread wait for x milliseconds
Thread.sleep(2000);
threat.interrupt();
Thread.sleep(2000);
threat.interrupt();
Thread.sleep(2000);
doBreakOut = true;
threat.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Test2();
}
}