首先,我已经阅读了所有这些讨论,即手动退出 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();
}
}
}