如何仅在应用程序启动时调用方法?请查看详情
How to call a method only when the app has been launched? Please see details
我有一种方法可以从 firebase
数据库中获取用户的详细信息和一些数据。
问题是该方法在启动应用程序后被调用两次或三次,当我从任何其他应用程序返回时再次调用 activity。
我已经将该方法放入 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()
。
这就是我从其他 activity:
返回的方式
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
请告诉我为什么 checkAuthState()
被调用三次,为什么在从任何其他 activity 返回时再次调用它,以及如何在应用程序被调用时仅调用一次此方法启动了吗?
抱歉,如果问题的格式似乎有误。我还是初学者!
创建启动器 activity 以检查 AuthStatus。
启动一个新的 activity 并终止启动器 activity。
将您的 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
中添加您自己的功能,就像 Activity 一样。要创建您自己的应用程序 class,请像这样更改清单中的应用程序名称:
<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);
我有一种方法可以从 firebase
数据库中获取用户的详细信息和一些数据。
问题是该方法在启动应用程序后被调用两次或三次,当我从任何其他应用程序返回时再次调用 activity。
我已经将该方法放入 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()
。
这就是我从其他 activity:
返回的方式@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
请告诉我为什么 checkAuthState()
被调用三次,为什么在从任何其他 activity 返回时再次调用它,以及如何在应用程序被调用时仅调用一次此方法启动了吗?
抱歉,如果问题的格式似乎有误。我还是初学者!
创建启动器 activity 以检查 AuthStatus。 启动一个新的 activity 并终止启动器 activity。
将您的 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
中添加您自己的功能,就像 Activity 一样。要创建您自己的应用程序 class,请像这样更改清单中的应用程序名称:
<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);