在我的Android应用程序中,有10个活动。我用数字识别所有这些活动。让活动1说活动10。
现在,当我第一次登录我的应用程序时,它会显示启动画面然后登录屏幕。我的应用程序询问密码。然后它将我重定向到活动3,这是书的第1页。现在假设我在第5页,即活动7,我突然按下Home按钮,然后应用程序进入后台状态。
现在我想要的是,当我再次在前台打开我的应用程序和我的应用程序时,它将无法启动活动7.我想首先启动活动2(登录屏幕),然后它要求输入正确的密码。如果用户输入正确的密码,则仅启动活动7。 所以基本上我的问题是,有没有办法确定我的应用程序是否会进入后台或在开始活动之前进入前台? (即android应用程序生命周期方法。)这样我就可以通过该应用程序生命周期方法首先启动登录活动。这对我来说是可行的,通过app委托生命周期方法。但我怎么能用android做到这一点?
答案 0 :(得分:1)
这是因为Activity LifeCycle。当您通过按主页按钮关闭应用程序时,将调用当时处于活动状态的相应活动的onStop()方法。此方法不会完全破坏Activity,只会停止它。
通过调用相应Activity的onDestroy()方法来破坏Android OS中的活动。但是,无法直接调用onDestroy()方法,因为它是Activity的LifeCycle方法。它由Android OS自动调用。为了确保在Activity停止后立即调用Activity的onDestroy()方法,我们将在各自Activity的onStop()方法中调用finish()方法。
let realm = new Realm({schemaVersion:1, schema:[PersonSchema]})
现在,当您再次启动应用时,它将从头开始,即启动画面。
答案 1 :(得分:1)
由于您不希望为用户提供任何空间,并且希望在应用程序进入后台后立即将其注销,我们可以使用常规活动生命周期来区分应用何时到后台以及何时出现屏幕切换发生了。您的Application类看起来像这样:
public class MyApplication extends Application implements ActivityLifecycleCallbacks {
public boolean userLoggedoff;
...
@Override
public void onActivityResumed(Activity activity) {
Log.i("Activity Resumed", activity.getLocalClassName());
if (userLoggedoff)
startPasswordActivity() // Make sure you add 'CLEAR_TOP' flag to intent
}
...
}
根据以下模板进行“登录”活动:
public class Act1 extends Activity {
private boolean legitSwitch;
...
// Legit app switch
private void startNewAct() {
legitSwitch = true;
...
startActivity()
}
protected void onPause() {
if (!legitSwitch)
((MyApplication) getApplication()).userLoggedOff = true;
}
}
确保从登录活动中将userLoggedOff
布尔值设置为true。希望这可以帮助。现在请记住,在按下主页按钮并返回之后,上面的方法仍然会显示之前的活动,因为我们正在对应用程序类的onActivityResumed()
方法执行操作,但是会立即启动登录活动因为如何敢于用户按下主页按钮!
答案 2 :(得分:0)
您可以为此目的扩展Application类。您需要像这样实现Activity生命周期回调:
public class MyApplication extends Application implements ActivityLifecycleCallbacks {
private boolean userLoggedOff;
private Handler mHandler;
...
@Override
public void onActivityResumed(Activity activity) {
Log.i("Activity Resumed", activity.getLocalClassName());
if (userLoggedoff)
startPasswordActivity()
else {
mHandler.cancelCallbacksAndMessages(null);
userLoggedOff = false;
}
}
@Override
public void onActivityPaused(Activity activity) {
Log.i("Activity Paused", activity.getLocalClassName());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
userLoggedOff = true;
}
}, 5000);
}
...
}
现在,我们在尝试的是,只要调用任何活动的onPause()
,我们就会使用处理程序触发延迟事件来关闭用户。只有在5秒钟内调用onResume()
任何活动时才能取消此事件(如您所知,这可能会在常规活动切换期间调用,也可能在应用程序来自后台时调用)。
我猜这可能会优雅地解决你的问题。