应用程序在扩展Google Plus登录活动后冻结

时间:2015-05-22 13:49:12

标签: android google-plus

我在我的应用中使用了Google+登录功能。登录功能位于我的LoginActivity中,登出功能是从另一个活动(包含碎片的活动)调用的。为了能够调用logout方法,包含Fragments的Activity扩展了Login Activity(否则应用程序崩溃)。这些方法在登录活动中:

// Initializing google plus api client (from onCreate method of Login Activity)
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_LOGIN).build();

 //Called when a connection is successful
 public void onConnected(Bundle arg0) {
    mSignInClicked = false;
    Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show();

    //Get user's information
    getProfileInformation();

    Intent intent = new Intent(getApplicationContext(), UtilityActivity.class);
    startActivity(intent);

}

当我运行应用程序时,Toast永远不会被解雇。当我评论出吐司并再次运行应用程序时,没有任何小部件响应。我认为该应用程序保持onConnected状态?

我不知道为什么会发生这种情况,但我怀疑它是因为我调用onCreate方法或onConnected方法两次?

注销的调用是通过包含像这样的片段的Activity的onOptionsItemsSelected方法进行的:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch (id) {
        case R.id.action_settings:
            Toast.makeText(getApplicationContext(), "Settings selected", Toast.LENGTH_LONG).show();
            return true;
        case R.id.action_logout:
            signOutFromGooglePlus();
            return true;
        case R.id.action_revoke_access:
            revokeGplusAccess();
            return true;
    }

单击登录按钮时调用的方法:

private void signInWithGooglePlus() {
    if (!mGoogleApiClient.isConnecting()) {
        mSignInClicked = true;
        resolveSignInError();
    }
}

1 个答案:

答案 0 :(得分:0)

您提到问题发生在UtilityActivity中,由LoginActivity在onConnect()中启动。

您可能遇到的问题(没有看到UtilityActivity中的代码)是UtilityActivity没有从LoginActivity引用连接的GooogleApiClient。因此,虽然您在LoginActivity中具有有效连接,但您不在UtilityActivity中。请记住,扩展LoginActivity并不意味着您共享其字段。这更像是无需复制/粘贴的共享代码。

有几个选项可供选择 - 在启动UtilityActivity的Intent中传递mGoogleApiClient的副本,使控制登录/注销的活动成为您所有其他活动可以使用的服务,仅传递UtilityActivity所需的信息启动时的Intent,让每个Activity直接管理他们的GoogleApiClient连接...