程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> android-在安卓中開啟一個新線程,發現如下代碼中if塊是DeadCode?為什麼,如何解決?

android-在安卓中開啟一個新線程,發現如下代碼中if塊是DeadCode?為什麼,如何解決?

編輯:編程解疑
在安卓中開啟一個新線程,發現如下代碼中if塊是DeadCode?為什麼,如何解決?

new Thread(){
public void run(){
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(hasData < 100){
progressStatus = progressStatus + (int)(Math.random() * 10);
handler.sendEmptyMessage(0x123);
// if(hasData >= 100){
// Toast.makeText(MainActivity.this,"耗時任務已完成",1).show();
// }
}

        }
    }.start();
}
備注progressStatus和handler已經在上面聲明了。

最佳回答:


 while(hasData < 100){
progressStatus = progressStatus + (int)(Math.random() * 10);
handler.sendEmptyMessage(0x123);
// if(hasData >= 100){
// Toast.makeText(MainActivity.this,"耗時任務已完成",1).show();
// }
}

從這塊代碼分析可知,有幾種情況:
1.如果原先 hasData >= 100的話,根本就不會進入到這個while循環中,那麼就不會執行if
2.如果原先hasData < 100 , 那麼會進入到while中,但是while中沒有改變hasData值的方法,那麼只會在while中死循環,永遠不會執行if
3.如果原先hasData < 100,那麼會進入到while中,而且通過handler.sendEmptyMessage(0x123);發送的請求,會改變hasData的值,但是,由於handler的執行相比當前thread是異步的,其觸發時機會存在不確定性,所以不知道hasData的值會是在while判斷前改變還是在if判斷錢改變,所以也會導致if裡面的內容不起作用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved