Java 如何仅在应用程序已启动时调用方法?请看详情

Java 如何仅在应用程序已启动时调用方法?请看详情,java,android,android-intent,onbackpressed,Java,Android,Android Intent,Onbackpressed,我有一种从firebase数据库获取用户详细信息和一些数据的方法 问题是,该方法在启动应用程序后会被调用两次或三次,在我从任何其他活动返回时会被再次调用 我将该方法放在onCreate方法中,如下所示: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activ

我有一种从
firebase
数据库获取用户详细信息和一些数据的方法

问题是,该方法在启动应用程序后会被调用两次或三次,在我从任何其他活动返回时会被再次调用

我将该方法放在
onCreate
方法中,如下所示:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        checkAuthState();
    }
<application
    android:name=".MyApplication"
    ...
</application>
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        checkAuthState();
    }
}
我确信我没有在
onStart()
onResume()方法中调用
checkAuthState()

以下是我从其他活动返回的方式:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
请告诉我为什么会三次调用
checkAuthState()
,为什么从任何其他活动返回时会再次调用它,以及如何在应用程序启动后仅调用一次此方法


抱歉,如果问题的格式似乎不正确。我还是个初学者

创建启动器活动以检查AuthStatus。 启动新活动并终止启动器活动。

将onCreate()方法更改为

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if(savedInstanceState == null){
        checkAuthState();
    }

}

您可以像活动一样,在
onCreate
中扩展应用程序并添加自己的函数。要创建自己的应用程序类,请在清单中更改应用程序的名称,如下所示:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        checkAuthState();
    }
<application
    android:name=".MyApplication"
    ...
</application>
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        checkAuthState();
    }
}
当然,
checkAuthState
必须在MyApplication中。我建议的另一种解决方案是使用
Firebase.AuthChangeListener
验证身份验证的更改:

// Listener to the user's authentication token expiration
Firebase.AuthStateListener authListener = new Firebase.AuthStateListener() {
    @Override
    public void onAuthStateChanged(AuthData authData) {
        checkAuthState();
    }
};
mFirebaseReference.addAuthStateListener(authListener);

该解决方案的可能重复之处在于,使用onSaveInstanceState跟踪身份验证状态似乎是一个很好的解决方案。我很快就会试试。另外,请告诉我们,当从其他活动返回时,如何停止onCreate再次被调用?这称为
checkAuthState()六次!这绝对不会让你的代码比以前运行得更多。这是你唯一改变的吗?嗯,我只是检查了一下,我工作得很好。。我希望您不是从其他任何地方调用此函数。。