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()代码>六次!这绝对不会让你的代码比以前运行得更多。这是你唯一改变的吗?嗯,我只是检查了一下,我工作得很好。。我希望您不是从其他任何地方调用此函数。。