2

我有一个按钮应该在按下时完成整个应用程序。按下按钮会打开一个对话框,在插入密码后,对话框的肯定侦听器应该关闭应用程序。这是对话框的正面侦听器代码:

.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()并不总是被调用(至少不是立即调用)所以我的问题是:

  1. 这种行为有什么问题吗?我应该以不同的方式完成我的应用程序吗?
  2. 之后是否有在android中调用的回调System.exit()
  3. 如果没有,实现一个与 my 执行相同操作的函数onDestroy()并在之前调用它是一个好习惯stopService()吗?
4

0 回答 0