Application singleton utiliser dans Android
J'ai un facebook initialiser sdk appel et j'en ai besoin pour initialiser le moment l'application est lancée:
Je veux utiliser ma classe d'Application pour le faire. par exemple:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
FacebookSdk.sdkInitialize(getApplicationContext());
}
}
J'ai l'activité principale, avec le facebook bouton de connexion:
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) {
}
});
}
}
Comment dois-je appeler mon Application singleton? Comment puis-je faire de son onCreate() de travail?
- Le android-studio tag est pour des questions au sujet de l'outil
- la classe d'Application s'exécuter lors de l'application de commencer, alors, quel est votre problème? vous voulez l'exécuter manuellement?
Vous devez vous connecter pour publier un commentaire.
Pour faire de votre classe App
singleton
suivez les modèle de conception Singleton:Puis de l'utiliser dans une autre classe:
Si c'est ce que vous demandez..
java.lang.IllegalAccessException: access to constructor not allowed
erreur lors de l'application se lance. Aussithis
danssynchronized()
d'erreur s'affichecannot be referenced from a static context
Lorsque vous étendez android.app.La classe d'Application, vous n'avez pas à appeler onCreate explicitement. Mais assurez-vous de spécifier dans AndroidManifest.xml,
comme ce android:name="nom complet"
par exemple: android:name="com.exemple.MyApplication"
Vous n'avez pas à implémenter le pattern Singleton cause Application EST DÉJÀ UN SINGLETON, il n'existe qu'une seule instance de votre Application.
Et, pour obtenir la instance de l'Application ou de tout enfant personnalisé de l'Application que vous avez définie, vous pouvez simplement appeler contexte.getApplication().
Référence https://developer.android.com/reference/android/app/Application.html
Je pense que vous essayez de faire un thread-safe singleton en java.
Voici le code que vous avez besoin pour notre
App
classe:Cela ne fait qu'une référence à lui-même. Nous voulons mettre en œuvre un Singleton pour le Multithreading. Ensuite, nous allons créer une autre classe qui encapsule la
App
classe dans son constructeur, comme ceci:Puis dans votre
MainActivity
classe, vous pouvez importer l'instance statique et l'utiliser dans votre code:Par exemple, vous pouvez l'utiliser dans votre
MainActivity
la classe, juste l'appel de la méthodeinitFacebookSdk()
comme ceci:java.lang.IllegalAccessException: private App() is not accessible from class android.app.Instrumentation