블루투스 검색 및 이메일 전송과 같은 일반적인 작업을 수행하는 서비스가 있습니다. 상태에 따라 Bluetooth 소켓 연결을하거나 전자 메일을 보내는 다른 스레드를 시작합니다. AsyncTask를 사용하여 전자 메일을 보내고 있으며 지금은 잘 작동하고 있습니다.서비스가 중지되면 AsyncTask가 서비스에서 시작합니까?
내가 가진 질문은 다음과 같습니다. AsyncTask 서비스가 중지되었을 때 서비스에서 시작했거나 AsyncTask가 완료 될 때까지 서비스가 중지되지 않았습니까? 정상적인 상황에서는 서비스가 절대로 중지되지 않지만 메모리가 부족하거나 배터리가 부족하거나 전화기가 꺼지면 서비스가 중지 될 수 있습니다. 서비스가 중지 된 후 작업을 다시 시작해야하며 서비스를 중지 할 때 AsyncTask가 완료되었는지 확인하는 방법이 궁금합니다.
내 코드의 스냅 샷을 포함 시켰습니다.
public class ScheduledService extends Service {
SendEmailAsyncTask emailTask;
boolean emailSuccess;
@Override
public int onStartCommand(Intent intent, int flag, int startId) {
log.v("onStart()");
super.onStartCommand(intent, flag, startId);
// do regular operations
if (state == sendEmail) {
emailTask = new SendEmailAsyncTask();
emailTask.execute();
}
}
class SendEmailAsyncTask extends AsyncTask <Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
// send email
}
@Override
protected void onPostExecute(Boolean result){
if (result) {
createNotification("Email has been sent!");
emailSuccess = true;
} else {
//try again
emailSuccess = false;
}
}
}
}
답장을 보내 주셔서 감사합니다! 그래서 전화가 종료되지 않으면 asynctask가 멈추지 않을 것입니다. asynctask의 결과가 성공했는지 여부를 알 수있는 방법이 있습니까? – Mira
모든 처리 (** doInBackground **)가 완료되면 비동기 작업이 완료됩니다. 연결 유지 스레드가 아닙니다. 실제로 별도의 스레드에서 무거운 작업을 수행하고 처리가 완료되면 자동으로 완료됩니다. ** onPostExecute ** 메소드를 관찰하여 작업이 완료되면 알 수 있습니다. 이 메서드는 작업이 완료 될 때 한 번만 호출됩니다. 자세한 정보 : http://developer.android.com/reference/android/os/AsyncTask.html – waqaslam