in meiner Anwendung kann ich nicht erstellen einfachen einzelnen Dienst zu Socket verbinden, in meiner Anwendung nach dem ersten Ausführen der Anwendung kann ich eine Anfrage ausstellen, aber nach der nahen Anwendung und erneut ausführen, meine App senden zweimal Anfrage an socket.io, und nach dem Löschen der App von der letzten Anwendung, die mehrere Anfragen an socket.io senden. Bitte helfen Sie mir einzigen Dienst zu schaffen eine Verbindung zu schaffen, dankAndroid create single dienstinstanz für Socket.io
Mein Service:
public class SignalChatServiceProvider extends Service {
public static SignalChatServiceProvider instance = null;
public static boolean isInstanceCreated() {
return instance == null ? false : true;
}
@Override
public IBinder onBind(Intent intent) {
return myBinder;
}
private final IBinder myBinder = new LocalBinder();
public class LocalBinder extends Binder {
public SignalChatServiceProvider getService() {
return SignalChatServiceProvider.this;
}
}
@Override
public void onCreate() {
super.onCreate();
realm = Realm.getDefaultInstance();
signalApplication = (SignalApplication) getApplication();
EventBus.getDefault().register(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
connectConnection();
Log.e("EJRA...", "");
return START_STICKY;
}
private Runnable onTypingTimeout = new Runnable() {
@Override
public void run() {
}
};
private void connectConnection() {
instance = this;
signalApplication.CHAT_SOCKET = signalApplication.getSocket();
signalApplication.getSocket().on(Socket.EVENT_CONNECT_ERROR, onConnectError);
signalApplication.getSocket().on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
signalApplication.getSocket().on(Socket.EVENT_CONNECT, onConnect);
signalApplication.getSocket().on("new message", onNewMessage);
signalApplication.getSocket().on("user joined", onUserJoined);
signalApplication.getSocket().on("getProductImages", getProductImages);
signalApplication.getSocket().connect();
}
private void disconnectConnection() {
instance = null;
signalApplication.getSocket().disconnect();
signalApplication.getSocket().off(Socket.EVENT_CONNECT, onConnect);
signalApplication.getSocket().off(Socket.EVENT_DISCONNECT, onDisconnect);
signalApplication.getSocket().off(Socket.EVENT_CONNECT_ERROR, onConnectError);
signalApplication.getSocket().off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
signalApplication.getSocket().off("new message", onNewMessage);
signalApplication.getSocket().off("user joined", onUserJoined);
signalApplication.getSocket().off("getProductImages", getProductImages);
signalApplication.getSocket().disconnect();
}
@Override
public void onDestroy() {
super.onDestroy();
disconnectConnection();
if (!realm.isClosed())
realm.close();
}
}
ActivityMain:
if (signalApplication.getSocket() != null && !SignalChatServiceProvider.isInstanceCreated()) {
startService(new Intent(getBaseContext(), SignalChatServiceProvider.class));
}
Anwendungsklasse:
public class SignalApplication extends Application {
public static List<MarketsBaseInformation> market_list_cache_data;
public static Socket CHAT_SOCKET;
@Override
public void onCreate() {
super.onCreate();
resources = this.getResources();
context = getApplicationContext();
IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.reconnection = true;
try {
CHAT_SOCKET = IO.socket(ClientSettings.getChatAddress(), opts);
} catch (URISyntaxException e) {
e.printStackTrace();
Log.e("SOCKET.IO ", e.getMessage());
}
}
public Socket getSocket() {
return CHAT_SOCKET;
}
}
Hallo Tux-Welt, In Ihrem Service, können Sie ein Protokoll innerhalb der onCreate und onDestroy Methoden hinzufügen und wenn Sie diesen Zyklus des Startens durch/Ihre Anwendung zu stoppen, wie oft sehen Sie diese Protokolle erscheinen ? –
@Henrik Gyllensvärd Hallo Herr, nach der klaren Anwendung von den letzten Anwendungen, mein Dienst neu erstellt, in der neuen Installation und Openning-Anwendung, senden Anfrage ist "einmal", nach der offenen Anwendung auf MainActivity Anfrage ist 'zweimal', warum? Ich bin müde :( –
Ich versuche zu helfen, aber um eine klare und gute Antwort zu geben, fragte ich nach den Protokollen :) Sie können auch versuchen, dies in Ihrer MainActivity überschreiben Sie die onDestroy-Methode so und fügen Sie Folgendes hinzu: stopService (neue Absicht (diese, SignalChatServiceProvider.class)); Wenn dies hilft, sollten wir Ihren Code ein wenig umstrukturieren, um zu verbessern, wie dies getan wird. :) –