【问题标题】:How to call a method only when the app has been launched? Please see details如何仅在应用程序启动时调用方法?请查看详情
【发布时间】:2016-06-09 19:31:43
【问题描述】:

我有一个方法可以从 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() 被调用三次,为什么在从任何其他活动返回时再次调用它,以及如何在应用程序启动后只调用一次此方法?

抱歉,如果问题似乎格式错误。我还是个初学者!

【问题讨论】:

标签: java android android-intent onbackpressed


【解决方案1】:

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

}

【讨论】:

  • 这调用了checkAuthState(); 六次!
  • 这绝对不会让您的代码比以前运行得更多。这是你唯一改变的吗?
  • 嗯,我刚刚检查了这个,对我来说工作正常..我希望你不要从其他任何地方调用这个函数..
【解决方案2】:

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

【讨论】:

  • 似乎是一个很好的解决方案。很快就会尝试。还请告诉您从其他活动返回时如何阻止 onCreate 再次被调用?
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多