Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:当应用程序处于后台时,将屏幕调暗_Android - Fatal编程技术网

android:当应用程序处于后台时,将屏幕调暗

android:当应用程序处于后台时,将屏幕调暗,android,Android,我正在开发一个小应用程序,通过对话框屏幕显示用户的密码 按下“主页”按钮时,我需要调暗屏幕(在“多任务”窗口上),以便其他人看不到密码 当用户重新打开应用程序时,它会请求应用程序锁定。但是,如果用户保持密码对话框打开并按下主页按钮,则对话框和用户上次查看的密码将保持可见(在多任务窗口中)一段时间(3-4秒!!),直到新对话框请求锁定 到目前为止,我尝试了所有可能的dialog.dissmiss()选项。仅当应用程序再次打开时(直到出现新的锁定对话框),对话框才会关闭,即使我将dismise()置

我正在开发一个小应用程序,通过对话框屏幕显示用户的密码

按下“主页”按钮时,我需要调暗屏幕(在“多任务”窗口上),以便其他人看不到密码

当用户重新打开应用程序时,它会请求应用程序锁定。但是,如果用户保持密码对话框打开并按下主页按钮,则对话框和用户上次查看的密码将保持可见(在多任务窗口中)一段时间(3-4秒!!),直到新对话框请求锁定

到目前为止,我尝试了所有可能的dialog.dissmiss()选项。仅当应用程序再次打开时(直到出现新的锁定对话框),对话框才会关闭,即使我将dismise()置于暂停、停止等状态

任何想法都值得赞赏

我也试过,

android.os.Process.killProcess(android.os.Process.myPid());
this.finish();
System.exit(0);

它们实际上都不起作用。

建议1:仔细检查您的实施情况。将对话框与活动生命周期绑定似乎是一个好主意(尤其是为了避免如上所述的泄漏窗口错误)

下面的示例对我来说效果很好(coachMark是从Dialog派生的)

当您按下home按钮时,onPause肯定会被调用,因此如果这种方法对您不起作用,请尝试不在(onRestart()、onStart()和onResume())的重新启动部分重新创建对话框,并查看是否正确地取消了该对话框



<强>建议2:如果所有这些都失败,您可能会考虑重写Home按钮,如所描述的。但我强烈建议不要这样做,因为这可能会导致应用程序以用户不希望的方式工作。

是的,我跟踪了日志,正如您所说,按下home按钮时会调用onPause()。我删除了对话框onStart()和调用dismise()onPause的重新创建。当按下主页按钮时,应用程序直接进入后台,我仍然可以看到对话框(当然是在多任务窗口中)。而且,解雇很慢,大概3秒钟。当应用程序在3秒内重新打开时,我仍然可以看到对话框。
@Override
protected void onResume()
{
    log.debug("onResume");
    super.onResume();

    // Show the coachMark depending on saved preference values
    coachMark.mayBeShow();
}

@Override
protected void onPause()
{
    log.debug("onPause");

    // Hide the coachMark if it is showing to avoid leakedWindow errors
    coachMark.maybeHide();

    super.onPause();
}