受信トレイから最初の100件のSMSを読み取り、ローカルデータベースに保存しています。私はAsyncTaskの助けを借りてこれを行っています。その後、ローカルデータベースからそれらのSMSを読み取り、表示します。最初の100個のSMSを読み取って保存した後のAysncTaskのonPostExecuteで、残りのSMSを読み取ってローカルデータベースに保存するサービスを呼び出しています。サービスを呼び出す前まで、UIは応答していましたが、サービスを呼び出した後、UIは応答しなくなりました。データベースのロックなどが原因ですか。この問題の解決にご協力ください...
私のAsyncTaskコード
private class InitialSetup extends AsyncTask<String, Integer, Long> {
@Override
protected Long doInBackground(String... urls) {
fetchSMS();
updateDatabase();
return 0L;
}
@Override
protected void onPostExecute(Long result) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
populateUI(getApplicationContext());
Intent intent = new Intent(getApplicationContext(), SMSService.class);
getApplication().startService(intent);
}
}
サービスコード
public class SMSService extends Service {
Long inboxSMSID, localSMSID;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onStart(Intent intent, int startid) {
if (intent.hasExtra("InboxSMS") && intent.hasExtra("SMSID")) {
inboxSMSID = intent.getLongExtra("InboxSMS", 0);
localSMSID = intent.getLongExtra("SMSID", 0);
globalToLocalSMSDB(inboxSMSID);
}
}
private void globalToLocalSMSDB(Long id) {
SMSTable smsObj = new SMSTable(getApplicationContext());
smsObj.open();
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor smscur = getContentResolver().query(uriSMSURI, null,
"_id < " + id, null, "_id DESC");
while (smscur.moveToNext()) {
String sender = SMSManagement.getSender(smscur);
String message = SMSManagement.getMessage(smscur);
String timeStamp = SMSManagement.getTime(smscur);
smsObj.insertIntoSMSTable(sender, message, timeStamp);
}
smscur.close();
smsObj.close();
}
}