我有一个名为 HomeActivity 的启动器活动。
LoginActivity ,用户必须登录才能访问其他屏幕。
HomeActivity 标记为 singleTask 。
在HomeActivity的onCreate()方法中,如果用户未登录,我会启动LoginActivity。
在LoginActivity中,我只是调用finish()来解除LoginActivity,假设HomeActivity是要显示的堆栈中的下一个活动。
此设置适用于大多数情况,除了一个。
我没有看到HomeActivity,而是看到HomeScreen。这是预期的吗?我做错了吗?
我没有开发者选项“不要保持活动” 关闭。所以,想知道活动堆栈是如何失去HomeActivity的,因为我期望在完成LoginActivity之后HomeActivity成为下一个活动。
在LoginActivity中取消或登录方法:
public void doLogin(View v) { setResult(RESULT_OK); finish(); } public void cancel(View v) { setResult(RESULT_CANCELED); finish(); }
调用LoginActivity:
来自 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 相同。
答案 0 :(得分:0)
我不会为此活动堆叠活动。
如果您需要启动登录活动,请启动活动并在HomeActivity中调用finish()。
if(!loggedIn){
Intent logInActivity = new Intent(MainActivity.this, LoginActivity.class);
//Potentially display a toast to say why the user is being directed to the log in screen
// add bundle into that flags to Go back to main activity.
logInActivity.put extra("activity", 1);
startActivity(logInActivity);
finish();
}
与登录活动类似,成功进行身份验证后,请调用以下命令:
if(loggedIn){
// get bundle it
Int a = get intent.getExtras().getInt("activity");
if(a==1)
Intent next= new Intent(LoginActivity.this, MainActivity.class);
///have a code for each activity that you could resume to
startActivity(next);
finish();
}
这应该可以缓解您的州问题。