我正在从Parse.com下载数据(String中的一些长消息)。
虽然代码以前在数据量较小时工作,但现在当数据库变大时,对于较弱的设备,下载过程将失败。代码如下:
// RemoteDataTask AsyncTask
private class DownloadRemoteDataTask_message extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
mProgressDialog = new ProgressDialog(CopyOfFirst2.this);
mProgressDialog.setTitle("Please wait!");
mProgressDialog.setMessage("Updating database...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params)
{
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("MessagesDB");
query.whereEqualTo("status", "accepted");
query.setLimit((total_message_be_dl+1));
query.orderByDescending("qref_message");
try
{
ob_message = query.find();
}
catch (ParseException e)
{
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
for (ParseObject parse_table : ob_message)
{
String t_objectID = parse_table.getObjectId();
String t_status = (String) parse_table.get("status");
String t_user = (String) parse_table.get("username");
String t_source = (String) parse_table.get("source");
String t_title= (String) parse_table.get("title");
int t_qref_canton = (Integer) parse_table.get("qref_canton");
String t_canton = (String) parse_table.get("canton");
int t_qref_message = (Integer) parse_table.get("qref_message");
String t_message = (String) parse_table.get("message");
String St_qref_canton = String.valueOf(t_qref_canton);
String St_qref_message = "C"+String.valueOf(t_qref_message);
String conso =
t_objectID + "----\n" //0
+ t_status + "----\n" //1
+ t_user + "----\n" //2
+ t_source + "----\n" //3
+ t_title + "----\n" //4
+ t_qref_canton + "----\n" //5
+ t_canton + "----\n" //6
+ t_qref_message + "----\n" //7
+ t_message + "----\n" //8
;
SharedPreferences.Editor e = settings.edit();
e.putString(St_qref_message,conso);
e.commit();
}
mProgressDialog.dismiss();
custom_dialog(total_message_be_dl);
}
}
ProgressDialog停止运行(在进程结束之前?),它会为更强大和更弱的设备冻结一段时间。
但是对于更强大的设备,大约7到8秒,custom_dialog弹出一条成功的消息,计算下载的总消息。
但是对于较弱的设备,它之后就会变黑。
到目前为止的消息量约为600条消息(包含中英文字符),相信每天会有+ 10条消息。
由于参考唯一密钥(qref xxx)的简单性,下载的数据将仅存储为SharedPrefrenece而不是本地数据库,
如何改进上述代码?或者如何才能使progressDialog在所有工作完成之前不会过快消失?
谢谢!
答案 0 :(得分:0)
SharedPreferences.Editor编辑器;方法 commit()是一项昂贵的操作。
这个电话肯定应该最小化。您可以在活动的onPause()内调用一次,以确保所有操作都得到更新。
了解更多详情: http://typorrhea.wordpress.com/2010/10/31/android-sharedpreferences-edit-commit-is-expensive/