【发布时间】:2013-11-20 05:54:39
【问题描述】:
您好,我正在开发一个 Android 应用程序,我正在尝试从内置短信应用程序加载短信。这个加载太慢了,加载所有短信几乎需要 10-15 秒。我正在加载短信 doInBackground 如下
private class MyBackgroundTask extends AsyncTask<Context, Integer, Boolean>
{
@Override
protected void onPreExecute()
{
pDialog = new ProgressDialog(Myapp.this);
pDialog.setMessage("Loading ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Boolean doInBackground(Context... params)
{
//fetching values from built-in message
getSMS();
return true;
}
@Override
public void onPostExecute(Boolean success)
{
pDialog.dismiss();
runOnUiThread(new Runnable()
{
public void run()
{
adapter = new SmsAdapter(EaseSms.this, listOfmessages);
smslist.setAdapter(adapter);
}
});
}
}
getSMS()方法如下
public void getSMS()
{
Uri uriSMSURI = Uri.parse("content://mms-sms/conversations?simple=true");
Cursor cursor = getContentResolver().query(uriSMSURI, new String[] {"*"}, null, null, "date desc");
while (cursor.moveToNext())
{
snippet = cursor.getString(cursor.getColumnIndexOrThrow("snippet"));
recipient_ids = cursor.getString(cursor.getColumnIndexOrThrow("recipient_ids"));
Cursor c = getContentResolver().query(Uri.parse("content://mms-sms/canonical-addresses"), null, "_id = " + recipient_ids, null, null);
c.moveToFirst();
r_address = c.getString(c.getColumnIndexOrThrow("address"));
Uri Nameuri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(r_address));
Cursor cs= getContentResolver().query(Nameuri, new String[]{PhoneLookup.DISPLAY_NAME,PhoneLookup._ID},PhoneLookup.NUMBER+"='"+r_address+"'",null,null);
if(cs.getCount()>0)
{
while (cs.moveToNext())
{
contactName = cs.getString(cs.getColumnIndex(PhoneLookup.DISPLAY_NAME));
contactID = cs.getString(cs.getColumnIndex(PhoneLookup._ID));
}
}
else
{
contactID = "01234567890";
contactName = r_address;
}
cs.close();
c.close();
addtomap();
}
cursor.close();}
}
是否可以在 onPreExecute 加载大约 10 条 SMS 并在 doInBackground 中继续加载其他的?我尝试了类似的东西。但它不起作用。谁能指导我解决这个加载缓慢的问题。
请帮忙。
谢谢!
【问题讨论】:
标签: android android-asynctask progressdialog android-contentresolver