我有一个按钮应该在按下时完成整个应用程序。按下按钮会打开一个对话框,在插入密码后,对话框的肯定侦听器应该关闭应用程序。这是对话框的正面侦听器代码:
.setPositiveButton("Done", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
boolean res = ApplicationDataManager.checkEntryDetails(userName.getText(), password.getText());
if(res){
logger.writeLog(LogType.INFO, TAG, "createDialog. Session ended.");
//message for ending session.
Toast.makeText(MenuActivity.this, "Session successfully ended!",
Toast.LENGTH_SHORT).show();
// stop both sensors and video recording.
stopService(sensorIntent);
stopService(videoRecordIntent);
menuActivityReference.finishAffinity();
System.exit(0);
}else{
logger.writeLog(LogType.INFO, TAG, "createDialog. wrong username or password for End Session");
//message for wrong input
Toast.makeText(MenuActivity.this, "Wrong user name or password! Please try again.",
Toast.LENGTH_SHORT).show();
//show dialog again for retry.
showDialog();
}
我有一个未绑定的服务,它被 停止stopService(sensorIntent);
,并像这样开始:
// create and start the sensors and video recording services in the background.
sensorIntent = new Intent(this, SensorsService.class);
sensorIntent.putExtra(PATIENT_KEYWORD, patient);
sensorIntent.putExtra(SENSORS_FILE_PATH, sensorFile);
startService(sensorIntent);
但不幸的是,没有调用服务 onDestroy() 函数。
public void onDestroy() {
logger.writeLog(LogType.INFO, TAG, "onDestroy. Unregistering sensors");
// unregister all of the sensors from sensorManager listener.
for (Sensor s : sensorList) {
sensorManager.unregisterListener(this, s);
}
super.onDestroy();
}
需要明确的是,我想在按下“肯定”按钮(并且密码正确)时关闭应用程序。
我有一个记录器在调用该方法时正在写入文件,所以我知道它没有被调用。还尝试调试并没有到达那里。调用后,stopService(sensorIntent);
我将使用以下几行关闭应用程序:
menuActivityReference.finishAffinity();
System.exit(0);
whilemenuActivityReference
只是对活动的引用。(这是从按钮监听器完成的,所以我不能使用this
关键字)。
经过广泛搜索,我发现onDestroy()
并不总是被调用(至少不是立即调用)所以我的问题是:
- 这种行为有什么问题吗?我应该以不同的方式完成我的应用程序吗?
- 之后是否有在android中调用的回调
System.exit()
? - 如果没有,实现一个与 my 执行相同操作的函数
onDestroy()
并在之前调用它是一个好习惯stopService()
吗?