gpt4 book ai didi

android - 按下 startActivityForResult 和 Home 键后调用 Activity 的状态

转载 作者:太空狗 更新时间:2023-10-29 15:07:57 24 4
gpt4 key购买 nike

我有一个名为 HomeActivity 的启动器 Activity .

还有一个 LoginActivity用户必须从那里登录才能访问其他屏幕。

HomeActivity标记为 singleTask .

在 HomeActivity 的 onCreate() 中方法,我启动 LoginActivity如果用户未登录。

并且在 LoginActivity ,我只是调用finish() , 解雇 LoginActivity ,假设 HomeActivity是堆栈中要显示的下一个 Activity 。

此设置适用于大多数情况,但有一种情况除外。

  1. 用户未登录。
  2. 启动应用程序 -> 启动 HomeActivity
  3. 未检测到登录 -> 启动 LoginActivity
  4. 关于 LoginActivity , 按主页。
  5. 启动应用程序,我看到了 LoginActivity .
  6. 登录,成功后,LoginActivity完成了。

而不是看到 HomeActivity ,我看到了主屏幕。这是预期的吗?我做错了什么吗?

我没有“不保留 Activity ”开发者选项关闭。所以,想知道 Activity 堆栈如何丢失 HomeActivity ,因为我期待 HomeActivity成为我完成 LoginActivity 后出现的下一个 Activity .

LoginActivity 中的取消或登录方法:

public void doLogin(View v) {
setResult(RESULT_OK);
finish();
}

public void cancel(View v) {
setResult(RESULT_CANCELED);
finish();
}

调用登录 Activity :

onCreate() 调用和 onNewIntent() .

为什么需要 onNewIntent()? 这样,我可以从其他任何地方启动 HomeActivity , 和 onNewIntent()在 session 到期的情况下将被调用。 HomeActivity 之上的所有其他 Activity 将被删除,并且 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 的 Activity 结果:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_CANCELED){
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}

list 文件:

<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 会这样.

最佳答案

我不会为此堆叠 Activity 。

如果您需要启动登录 Activity ,请启动该 Activity 并在您的 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();
}

与Log-In Activity类似,认证成功后,调用如下:

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();
}

这应该可以缓解您的状态问题。

关于android - 按下 startActivityForResult 和 Home 键后调用 Activity 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com