アプリケーションでサービスクラスを作成して、バックグラウンドでタスクを実行しました。アプリケーションを終了すると、サービスはまだ実行されていますが、それは問題ありません。しかし問題は、アプリケーションを再実行すると、新しいサービスが実行され、アプリケーションを再起動するたびに新しいサービスが作成されることです。ここに私のコードはアプリケーションを再起動すると、新しいサービスが実行されます
public class myService extends Service {
Socket socket;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
connectSocket();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
socket.disconnect();
}
private void connectSocket() {
try {
socket = IO.socket("http://192.168.1.52:2500");
socket.on(Socket.EVENT_CONNECT, onConnected);
socket.on(Socket.EVENT_CONNECT_ERROR, onConnectionError);
socket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectionTimout);
socket.on(Socket.EVENT_DISCONNECT, onDisconnect);
socket.on("test_callback", eventCallback);
socket.connect();
} catch (URISyntaxException e) {
Log.d(getClass().getSimpleName(), "Socket Connection Exception");
e.printStackTrace();
}
}
private Emitter.Listener onConnected = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d("SocketIO","onConnected");
socket.connect();
}
};
private Emitter.Listener onConnectionError = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d("SocketIO","onConnectionError");
socket.connect();
}
};
private Emitter.Listener onConnectionTimout = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d("SocketIO","onConnectionTimout");
socket.connect();
}
};
private Emitter.Listener onDisconnect = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d("SocketIO","onDisconnect");
socket.disconnect();
}
};
int notno = 0;
private Emitter.Listener eventCallback = new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject data = (JSONObject) args[0];
String message;
try {
message = data.getString("message").toString();
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(myService.this)
.setSmallIcon(R.drawable.head)
.setContentTitle("Message")
.setContentText(message);
NotificationManager nfm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
nfm.notify(notno ,mBuilder.build());
notno++;
} catch (JSONException ignored) {
}
}
};
}
とメインクラス内のonCreateメソッドでこのコードを実行します:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
startService(new Intent(getBaseContext(), myService.class));
}
アプリケーションからサービスを開始しようとしましたか? – algrid
はい、あります。私は何をすべきか?最初のアクティビティクラスで –