我有一个名为HomeActivity
.
以及LoginActivity
用户必须登录才能访问其他屏幕的位置。
HomeActivity
被标记为singleTask
。
在 HomeActivity 的onCreate()
方法中,LoginActivity
如果用户未登录,我将启动。
在 中LoginActivity
,我只是调用 afinish()
来关闭LoginActivity
,假设HomeActivity
是要显示的堆栈中的下一个活动。
此设置适用于大多数情况,除了一种情况。
- 用户未登录。
- 启动应用程序 -> 启动
HomeActivity
- 未检测到登录 -> 启动
LoginActivity
- 上
LoginActivity
,按主页。 - 启动应用程序,我看到
LoginActivity
. - 进行登录,成功
LoginActivity
后就完成了。
我没有看到 ,而是HomeActivity
看到了 HomeScreen。这是预期的吗?我做错什么了吗?
我没有关闭开发者选项“不保留活动”。所以,想知道活动堆栈是如何丢失的,因为我希望在完成.HomeActivity
HomeActivity
LoginActivity
LoginActivity 中的取消或登录方法:
public void doLogin(View v) {
setResult(RESULT_OK);
finish();
}
public void cancel(View v) {
setResult(RESULT_CANCELED);
finish();
}
调用登录活动:
onCreate()
从和调用onNewIntent()
。
为什么需要 onNewIntent()?这样,我可以从其他任何地方启动HomeActivity
,并且onNewIntent()
在会话到期的情况下会被调用。上面的所有其他活动都HomeActivity
将被删除,并且LoginActivity
应该显示出来。
protected void onCreated(Bundle savedInstance){
if(!isLoggedIn()){
startLoginActivity();
}
}
protected void onNewIntent(Intent intent){
if(!isLoggedIn()){
startLoginActivity();
}
}
private void startLoginActivity(){
Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, 100);
}
关于 HomeActivity 的活动结果:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_CANCELED){
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
清单文件:
<activity android:launchMode="singleTask"
android:name="com.example.checkact.HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.checkact.LoginActivity"></activity>
更新:使用singleTop
似乎工作正常,但我不知道为什么它的行为与singleTask
.