android - 当应用程序从后台进入前台时启动特定的 Activity

标签 android android-activity

在我正在开发的应用程序中,某些屏幕需要密码保护。因此,如果用户离开应用程序(通过按主页或另一个应用程序出现在前台或屏幕关闭)并在一段时间(30 秒)后返回,应用程序应该在之前询问密码(显示密码屏幕)显示他离开时的屏幕。

到目前为止我尝试过的是:

  • Application 类中,我使用 ActivityLifecycleCallbacks 跟踪 Activity 生命周期并触发 2 个事件,一个在应用程序进入后台时触发,另一个在应用程序返回时触发前景。

  • 在“后台”事件中,我跟踪当前时间戳。然后在“前台”事件中,我检查应用程序是否在后台运行 30 秒,如果是,则告诉当前 Activity 启动密码屏幕。

这工作正常。但问题是,通过这种方式, protected 内容/屏幕会显示一段时间,直到密码屏幕启动(因为密码屏幕是由内容屏幕本身启动的)。

有没有更好的方法让密码屏幕先出现?

最佳答案

您所描述的是 java 继承的一个基本的重要用例,可以通过从 Activity 类继承的基类轻松解决。

首先我们创建一个基类:

public class NeedPasswordActivity extends AppCompatActivity {

    @Override
    protected void onResume() {
        super.onResume();
        //Check time stamp here
    }

    @Override
    protected void onPause() {
        super.onPause();
        //Set time step here
    }
}

然后在每个需要密码验证的 Activity 中,我们继承自 NeedPasswordActivity:

public class NeedToHavePassowrdActivity extends NeedPasswordActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume(); //call the code from our NeedPasswordActivity and check time stamp before loading the activity
    }

    @Override
    protected void onPause() {
        super.onPause(); //call the code from our NeedPasswordActivity and set time stamp
    }
}

重要提示:super. 必须是方法中的第一行,因此在验证时间戳之前我们的 Activity 中不会调用任何内容

关于android - 当应用程序从后台进入前台时启动特定的 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670783/

相关文章:

java - 如何在 finish() 方法中获取上下文?

java - 在 android Activity 中将按钮添加到操作栏

安卓 Activity 堆栈

android - 如何在 unity3d 中调用数据库中的项目?

android - Sonarqube 不显示 Android Lint 的结果

java - Android facebook 使用电子邮件登录

java - 创建登录类型的 Activity 并强制它成为唯一的开放点

php - 将 $_POST 数据发送到 Android Webview

Android - 静态 block 没有被首先调用,为什么?

android - 使用 ActivityForResult()