应用程序单例在Android中使用

Ack*_*man 3 java singleton android facebook-sdk-3.0

我有一个facebook初始化sdk调用,我需要它来初始化应用程序启动的时刻:

我想使用我的Application类来做到这一点.例如:

public class App extends Application {

@Override
public void onCreate() {
    super.onCreate();
    FacebookSdk.sdkInitialize(getApplicationContext());
}
}
Run Code Online (Sandbox Code Playgroud)

我有facebook登录按钮的主要活动:

public class MainActivity extends AppCompatActivity {
@BindView(R.id.login_button)
LoginButton loginButton;

private CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);

    callbackManager = CallbackManager.Factory.create();
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });
}
}
Run Code Online (Sandbox Code Playgroud)

如何调用我的应用程序单例?如何使其onCreate()工作?

See*_*ker 13

当您扩展android.app.Application类时,您不必显式调用onCreate.但请确保在AndroidManifest.xml中指定它,例如android:name ="完全限定名称", 例如:android:name ="com.example.MyApplication"

您不必实现Singleton模式原因Application IS ALREADY A SINGLETON,只有一个Application实例.并且,要获取Application 实例或您定义的Application的任何自定义子项,您只需调用context.getApplication()即可.

参考https://developer.android.com/reference/android/app/Application.html


Anm*_*mol 4

要使您的App类单例遵循Singleton设计模式:

public class App
  {
    // Create the instance
    private static App instance;
    public static App getInstance()
    {
         if (instance== null) {
                synchronized(App.class) {
                        if (instance == null)
                                instance = new App();
                        }
                }
                // Return the instance
                return instance;
    }

    private App()
    {
        // Constructor hidden because this is a singleton
    }

    public void initFBSdk()
    {
        FacebookSdk.sdkInitialize(getApplicationContext());
    }
}
Run Code Online (Sandbox Code Playgroud)

}

然后在任何其他类中使用它:

App.getInstance().initFBSdk();
Run Code Online (Sandbox Code Playgroud)

如果这是你要求的..

  • 如果它不能实现应用程序obj,android应该如何启动你的应用程序? (4认同)
  • 这是Java中通用的单例设计模式,在Android“应用程序类”中不起作用,因为应用程序类是由ART通过其构造函数调用的,因此构造函数不能是私有的。要在应用程序启动时初始化 SDK,只需在 onCreate 中初始化,它将在应用程序类在任何 Activity/服务之前运行时工作。 (2认同)