まず第一に、Android アプリケーションを手動で終了するのは得策ではないというこのすべての議論について、私はすでに読んでいます。しかし、私の場合は必要なようです。AsyncTask
バックグラウンドで多くの操作を行う があります。つまり、データをダウンロードしてローカル ストレージに保存し、アプリケーションで使用できるように準備します。インターネット接続がないか、別のことが起こる可能性があります。そのすべてのケースで、結果を返す例外処理があります。例外が発生した場合、アプリケーションは使用できないため、終了する必要があります。私の質問は、コードでアプリケーションを終了するときに、登録解除のアンロードまたはバインド解除のタスクなどを行う必要がありますか?それとも問題ありSystem.exit(0)
ませんか? 私はこれをすべて で行いAsyncTask
ます。私の例を見てください:
public class InitializationTask extends AsyncTask<Void, Void, InitializationResult> {
private ProcessController processController = new ProcessController();
private ProgressDialog progressDialog;
private Activity mainActivity;
public InitializationTask(Activity mainActivity) {
this.mainActivity = mainActivity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(mainActivity);
progressDialog.setMessage("Die Daten werden aufbereitet.\nBitte warten...");
progressDialog.setIndeterminate(true); //means that the "loading amount" is not measured.
progressDialog.setCancelable(false);
progressDialog.show();
};
@Override
protected InitializationResult doInBackground(Void... params) {
return processController.initializeData();
}
@Override
protected void onPostExecute(InitializationResult result) {
super.onPostExecute(result);
progressDialog.dismiss();
if (!result.isValid()) {
AlertDialog.Builder dialog = new AlertDialog.Builder(mainActivity);
dialog.setTitle("Initialisierungsfehler");
dialog.setMessage(result.getReason());
dialog.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
//TODO cancel application
System.exit(0);
}
});
dialog.show();
}
}
}