2014-10-09 83 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方法,该方法在回调中将信息持久保存到本地数据库。

这样你就可以在没有网络连接的情况下使用你的应用。