2012-03-06 4 views
1

블루투스 검색 및 이메일 전송과 같은 일반적인 작업을 수행하는 서비스가 있습니다. 상태에 따라 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; 
      } 
     }  
    } 
} 

답변

2

작업은 뭔가를하고있는 경우 중지하고 서비스가 중지 사이되지 않습니다. 작업 을 호출하지 않는 한 메서드를 서비스의 onDestroy의 구현을 취소하면 완료되지 않습니다.

+0

답장을 보내 주셔서 감사합니다! 그래서 전화가 종료되지 않으면 asynctask가 멈추지 않을 것입니다. asynctask의 결과가 성공했는지 여부를 알 수있는 방법이 있습니까? – Mira

+0

모든 처리 (** doInBackground **)가 완료되면 비동기 작업이 완료됩니다. 연결 유지 스레드가 아닙니다. 실제로 별도의 스레드에서 무거운 작업을 수행하고 처리가 완료되면 자동으로 완료됩니다. ** onPostExecute ** 메소드를 관찰하여 작업이 완료되면 알 수 있습니다. 이 메서드는 작업이 완료 될 때 한 번만 호출됩니다. 자세한 정보 : http://developer.android.com/reference/android/os/AsyncTask.html – waqaslam

관련 문제