我有一个名为 HomeActivity 的启动器Activity .
并且 LoginActivity 用户必须登录才能访问其他屏幕 .
HomeActivity 标记为 singleTask .
在HomeActivity的onCreate()方法中,如果用户未登录,我将启动LoginActivity .
在LoginActivity中,我只是调用finish()来解除LoginActivity,假设HomeActivity是要显示的堆栈中的下一个活动 .
此设置适用于大多数情况,除了一个 .
-
用户未登录 .
-
启动应用程序 - >启动HomeActivity
-
未检测到登录 - >启动LoginActivity
-
在LoginActivity上,按home .
-
启动应用程序,我看到了LoginActivity .
-
登录,登陆成功后,LoginActivity就完成了 .
我没有看到HomeActivity,而是看到HomeScreen . 这是预期的吗?我做错了吗?
我没有将开发者选项 "Don't keep activities" 变为 off . 所以,想知道活动堆栈是如何失去HomeActivity的,因为我希望在完成LoginActivity之后HomeActivity成为下一个活动 .
Cancel or Login methods in LoginActivity:
public void doLogin(View v) {
setResult(RESULT_OK);
finish();
}
public void cancel(View v) {
setResult(RESULT_CANCELED);
finish();
}
Calling LoginActivity:
从 onCreate() 和 onNewIntent() 调用 .
Why onNewIntent() is needed? 因此,在其他任何地方,我都可以启动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);
}
On Activity Result of HomeActivity:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_CANCELED){
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
The manifest file:
<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>
Update: 使用 singleTop 似乎工作正常,但我不知道为什么它与 singleTask 的行为相同 .
1 回答
我不会为此积累活动 .
如果您需要启动登录活动,请启动活动并在HomeActivity中调用finish() .
与登录活动类似,成功进行身份验证后,请调用以下内容:
这应该可以缓解你的国家问题 .