我有一個使用Android SDK提供的AsyncTask
類的問題。我從我的代碼中開始了一項任務,該任務是定期發送電子郵件(按照指定的時間)。我重新啓動onPostExecute()
中的任務。它會定期發送電子郵件,但過了一段時間後,電子郵件會停止。按下後退按鈕是否對它有影響?AsyncTask的使用
我正在通過以下鏈接AsyncTask,發現AsyncTask
需要在活動方向更改或焦點不清的情況下刷新。我需要分開處理嗎?每當activity
不在焦點或其方向改變時,是否需要刷新context
?根據上下文,我正在執行某些數據庫操作。
這裏是我的AsyncTask
代碼:
public class SendEmailTask extends AsyncTask<String, Void, String> {
private static final String LOG_TAG = "EmailTask";
private static final int MESSAGE_SENT = StringConstants.CONSTANT_YES_FLAG;
private Context context;
public SendEmailTask(Context context) {
this.context = context;
}
@Override
protected String doInBackground(String... time) {
// String message = "Message sent at ";
try{
//DB operations
Validator validator = new Validator(context);
int emailInterval = validator.validForSendingEmail(settingsMap);
String emailId = settingsMap.get(DBSetting.COLUMN_EMAILID);
String emailPwd = settingsMap.get(DBSetting.COLUMN_EMAIL_PWD);
if (emailId != null && emailPwd != null && emailInterval > 0) {
Thread.sleep((Integer.valueOf(emailInterval) * 60000));
// TODO: formatting of email body
DALLog dalLog = DALLog.getDALLogInstance();
dalLog.init(context);
GMailSender sender = new GMailSender(emailId, emailPwd);
sender.sendMail("Mail From Auto responder",
result, emailId,
emailId);
dalLog.close();
}
return null;
}
catch (NumberFormatException e) {
e.printStackTrace();
Log.d(LOG_TAG, e.getMessage());
}
catch (InterruptedException e) {
e.printStackTrace();
Log.d(LOG_TAG, e.getMessage());
}
catch (Exception e) {
Log.d(LOG_TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String result) {
//DB operations
Validator validator = new Validator(context);
int emailInterval = validator.validForSendingEmail(settingsMap);
// Start EmailTask thread if not started already
SendEmailTask emailTask = new SendEmailTask(context);
if (emailTask.getStatus() != AsyncTask.Status.RUNNING) {
emailTask.execute(new String[]{});
}
}
}
是的。 asynctask只存在於啓動它的上下文中。一個活動,很可能。使用服務進行後臺任務。 – njzk2
也應該知道用於asynctask(池)的線程數量有限(默認情況下)。阻止一個不是一個好主意。我會建議使用這個警報管理器。 – njzk2
同意njzk2。另一個說法,條件「if(emailTask.getStatus()!= AsyncTask.Status.RUNNING)」是完全沒用的 – gezdy