2014-10-09 100 views
0

我正在使用解析來存儲我的數據並在使用我的程序時做了很多查詢。 問題是,在大約+/- 20個類似查詢後,解析findInBackground()或getFirstInBackground()不會返回回調,並且應用程序停留在該位置。Android解析SDK問題

我的查詢代碼:

所有的
ParseQuery<OptionCodeDTO> mQuery; 
    mQuery = ParseQuery.getQuery(OptionCodeDTO.class); 
    mQuery.whereEqualTo("code", prCode); 
    mQuery.getFirstInBackground(new GetCallback<OptionCodeDTO>() { 
     @Override 
     public void done(OptionCodeDTO optionCodeDTO, ParseException e) { 
      if (isVisible()) { 
       if (e == null) { 
        OptionCode opCode = new OptionCode(optionCodeDTO); 
        mCodes.push(opCode); 
        printCodes(); 
        prDescrLayout.setVisibility(View.VISIBLE); 
        prDescProgress.setVisibility(View.GONE); 
        mPRLable.setVisibility(View.GONE); 
       } else { 
        if (e.getCode() == ParseException.CONNECTION_FAILED) { 
         mPrDescr.setText(R.string.dtc_lookup_check_network); 
        } else if (e.getCode() == ParseException.OBJECT_NOT_FOUND) { 
         mPrDescr.setText(R.string.pr_lookup_code_not_found); 
        } else { 
         mPrDescr.setText(R.string.dtc_lookup_other_problems); 
        } 
        prDescrLayout.setVisibility(View.VISIBLE); 
        prDescProgress.setVisibility(View.GONE); 
       } 
      } 
     } 
    }); 
+0

運行查詢的速度有多快?除非你已經升級你的計劃,否則有30個請求/秒的突發限制。 – Dehli 2014-10-09 14:59:48

+0

通過解析分析性能我們甚至不會達到2個請求/秒 – user2996120 2014-10-10 07:26:46

回答

0

首先,如果你的應用程序中的ANR因爲UI線程的東西,依賴於後臺線程(應用程序沒有響應),這是不正確的架構。

也許你必須優化你的應用程序與Parse的交互。通常,在例如循環內部製作大量saveInBackground是一種不好的做法。您可以將需要保存的對象添加到列表中,然後使用ParseObject.saveAllInBackground(objectList)

另外一個優化的想法是使用本地存儲 - 使用SQLite構建的android。例如,如果您的應用程序依賴於一些被保存到解析,邏輯是這樣的:

  1. 當保存對象首先你保存到本地數據庫和運行saveInBackground方法。

  2. 提取對象時,首先從本地數據庫中獲取對象,然後運行getInBackground方法,該方法在回調中將信息持久保存到本地數據庫。

這樣你就可以在沒有網絡連接的情況下使用你的應用。