2012-03-06 7 views
1

私はBluetoothディスカバリーや電子メールの送信などの通常の操作を行うサービスを持っています。状態によっては、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

関連する問題