繁体   English   中英

如何在应用程序启动时调用方法? 请看细节

[英]How to call a method only when the app has been launched? Please see details

我有一个方法,我从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();
    }

我确信我没有在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()被调用三次以及为什么在从任何其他活动导航时再次调用它以及如何在应用程序启动时仅调用此方法一次?

对不起,如果问题似乎格式错误。 我还是初学者!

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

}

为checkAuthStatus创建启动器活动。 启动新活动并终止启动器活动。

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

<application
    android:name=".MyApplication"
    ...
</application>

然后,您可以像这样声明MyApplication:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM