2012-11-01 49 views
0

我正在使用以下函數創建一個新線程。UI線程凍結

public void toCallAsynchronous() { 
    mThread = new Thread() { 
     public void run() { 
      while (true) { 
       try { 
        // do something here 
        if(mLoggedIn) 
        { 
         boolean syncresult = mDownload.syncData(); 
        } 
        Log.d(TAG, "local Thread sleeping"); 
        Thread.sleep(10000); 
        //mHandler.postDelayed(this, 1000); 
       } catch (InterruptedException e) { 
        Log.e(TAG, "local Thread error", e); 
       } 
      } 
     } 
    }; 
    mThread.start(); 
} 

我打電話給onResume,因爲我希望此線程只在用戶登錄到他的帳戶時才啓動。 synData函數訪問服務器以獲取新文件,下載它們並將條目更新到數據庫中。你能否確定我在這裏做錯了什麼?

回答

2

while(true)很奇怪,因爲你可能不希望這個線程永遠運行。至少它應該是while(!isFinishing())

此外,你會想確保mDownload.syncData不會嘗試訪問任何用戶界面,如果它確實會有一個例外。

+0

謝謝亞歷克斯。我將其更改爲(mRunning),並在onResume中將其設置爲true,並在onPause和onDestroy中將其設置爲false。此外,還有一些關於syncData的UI操作,它在刪除後可以完美運行。 – Ankuj