2016-02-07 18 views
0

因爲我是android編程的新手,所以我不確定如何有效編寫代碼,因此出現此問題的原因。我正在創建一個應用程序。一個基本的應用程序,其中應用程序生成10個隨機數學問題,並從左向右進行評估(忽略操作順序)。例如。 3 + 5/2應該等於4而不是5.5。設備變黑,啓動超時失效

我收到錯誤啓動超時已過期。我研究了這一點,發現它是因爲主線程做了太多工作。我如何克服這一點?我的應用程序首先做了很多隨機整數,情況可能如此嗎?

這是代碼。這很長。 P.S.在顯示方法中,我對它進行了編碼以顯示第一個元素,以查看它是否會顯示。

public void initAnswers(String[] questionToBeLooped){ 


    for(int i =0; i < questionToBeLooped.length; i++){ 



     if(mathOperations.length == 2){ 
      runningTotal = evaluateAnswerTwoOperations(mathOperations[0], mathNumbersInIntFormat.get(0), mathNumbersInIntFormat.get(1)); 
     }else{ 
      int operationsCounter =0; 
      int numbersCounter =1; 
      runningTotal = mathNumbersInIntFormat.get(0); 
      while(mathOperations[operationsCounter] != "="){ 
       runningTotal = evaluateAnswerTwoOperations(mathOperations[0],runningTotal,mathNumbersInIntFormat.get(numbersCounter)); 
      } 

     } 
     answers[i] = runningTotal; 
    } 

} 

有人能告訴我如何有效地寫這個,也可以提供一些提示,以生成流暢和高效的應用程序。

回答

0

不知道你的代碼是什麼原因,但你應該把繁重的工作卸載到AsyncTaskAsyncTask將允許您通過doInBackground在後臺線程中執行代碼,並通過onPostExecute回調到UI線程。你正在做的繁重工作可能是你所擁有的循環結構。

請記住,您無法從後臺修改用戶界面,因此如果您需要更新用戶界面,請等到繁重的工作完成並在onPostExecute中完成。

請參閱AsyncTask上的文檔here

另外值得注意的是AsyncTask有一個lot of flaws,但由於你是新的 - 這是我建議開始的地方。

+0

哦好吧謝謝你的提示。我剛看了一下我的代碼,得到了一些新鮮空氣,並注意到我的initAnswers方法中的while循環偶然發生了無限循環。你認爲這可能是原因? –

+1

是的,主線程上的無限循環會導致這種情況。 – Eggman87

+0

這就是爲什麼對於編碼人員定期休息是很重要的!不敢相信我犯了那個錯誤... –