1

在我的应用程序中,我使用了 iosched 2012 应用程序中的一些代码。具体来说,启动工作流程如下:

1.用户按下应用程序的启动器图标

2.HomeActivity 检查用户是否通过身份验证。如果他/她不是,它将启动身份验证活动,将其意图传递给它并自行完成

3.登录过程成功后,authenction Activity 启动一个Activity 以启动HomeActivity 并自行结束

4.HomeActivity 再次检查用户是否通过身份验证并显示应用程序的主屏幕。

下面的代码在 API Level > 11 中就像一个魅力。今天,我在 Gingerbread 中尝试了该应用程序,但它失败了。第 3 步有效,但尽管 HomeActivity 启动它并没有被带到前面。您必须使用最近列表并选择应用程序才能查看 homeactivity 及其现在显示的内容。

这是代码并从 oncCreate 方法中的 HomeActivity 检查

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(!AccountUtils.isSystemAuthenticated(this)) {
        AccountUtils.startSystemAuthentication(this, getIntent());
        finish();
    } else if(!AccountUtils.isAppAuthenticated(this)) {
        AccountUtils.startAppAuthentication(this, getIntent());
        finish();
    } 

    if(isFinishing()) {
        return;
    }

    setContentView(R.layout.activity_main);
            ...
    }
 }

登录过程完成后在 Authentication 活动中调用的方法

protected void handleLoginSuccess(LoginServiceResponse response, String username, String password) {
if(....) {
        if(mFinishIntent != null) {
            mFinishIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            mFinishIntent.setAction(Intent.ACTION_MAIN);
            mFinishIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(mFinishIntent);
        }

        finish();
        } else {
            super.handleLoginSuccess(response, username, password);
        }
    }

其中 mFinishIntent 成员变量是从 HomeActivity 传递的意图(使用 getIntent())

正如我所提到的,在 API Level > 11 中,这运行良好,并且 HomeActivity 的 onCreted 方法中的断点被命中两次,而在 Gingerbread 手机中,仅被命中一次(仅在应用程序启动时)。

我是否必须使用另一个标志或者您对发生的事情有任何其他想法?

谢谢

4

1 回答 1

0

可能发生的情况是该活动仅在应用程序启动时创建,然后当您从身份验证活动返回到它时,它只是恢复。尝试将身份验证检查代码放在 onResume() 方法中的 HomeActivity 中。

这是更多信息:http: //developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

于 2012-09-21T00:39:12.963 回答