在我正在开发的应用程序中,某些屏幕需要密码保护。因此,如果用户离开应用程序(通过按主页或另一个应用程序出现在前台或屏幕关闭)并在一段时间(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/