私は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;
}
}
}
}
感謝を完了されます!したがって、電話がシャットダウンされない限り、asynctaskは停止されません。 asynctaskの結果が成功したかどうかを知る方法はありますか? – Mira
すべての処理(** doInBackground **)が完了すると、非同期タスクが完了します。キープアライブスレッドではありません。実際には、別のスレッドで重い持ち上げを行い、処理が完了すると自動的に終了します。 ** onPostExecute **メソッドを観察することによって、タスクが完了したときを知ることができます。このメソッドは、タスクが完了したときに一度だけ呼び出されます。詳細はhttp://developer.android.com/reference/android/os/AsyncTask.htmlをご覧ください。 – waqaslam