【问题标题】:Android application Crashing after quit it by pressing "back button"Android应用程序在按“后退按钮”退出后崩溃
【发布时间】:2023-08-19 14:22:01
【问题描述】:

作为我的 android 应用程序开发研究的一部分,我通过访问 LED 闪光灯开发了一个简单的 SOS 应用程序。一切正常,LED 以 1/2 秒的间隔闪烁。但是当用户按下手机中的后退按钮时,应用程序会退出,并在 1/2 秒后出现“崩溃/强制关闭”消息。我是 android 开发的菜鸟,我的代码有什么问题?

private boolean lOn=true;



    Timer mTimer = new Timer();
    TimerTask mTimerTask = new TimerTask() {
        @Override
        public void run() {

            if(lOn){
                final Parameters p = camera.getParameters();
                Log.i("info", "torch is turn Off!");
                p.setFlashMode(Parameters.FLASH_MODE_TORCH);
                camera.setParameters(p);
                camera.startPreview();
                lOn=false;
            }
            else {
                final Parameters p = camera.getParameters();
                p.setFlashMode(Parameters.FLASH_MODE_OFF);
                camera.setParameters(p);
                camera.stopPreview();
                isLighOn = false;
                lOn=true;
            }


        }
    };

【问题讨论】:

  • 为了将来参考,请发布堆栈跟踪,您可以通过在命令行中运行 adb logcat 或使用 Eclipse 中的 Debug 透视图来找到它。

标签: java android android-widget


【解决方案1】:

可能是因为你没有取消你的计时器..

试试这个

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if(event.getAction() == KeyEvent.ACTION_DOWN)
        {
            if( keyCode == KeyEvent.KEYCODE_BACK )
            {
                mTimer.cancel();
            }   
        }
        return super.onKeyDown(keyCode, event);
    }

【讨论】:

    【解决方案2】:

    在调用 cancel(); 之后调用 purge(); 方法。为什么?调用取消方法时,计时器停止工作。但它没有关闭。我们必须在应用程序关闭之前手动关闭它,例如在 sqlite 中调用db.close();。尝试这个。我认为这仅适用于计时器。我不知道 TimerTask。

    mTimer.cancel();
    mTimer.purge();
    

    【讨论】: