对于支票状态用户,我应该每隔5分钟通过Retrofit2将一些数据发送到服务器。
当然,应该在用户使用应用程序时发送此信息
这意味着当用户退出应用程序时,无需向服务器发送任何内容
最好的方法是什么?
对于连接到服务器,我使用Retrofit2。
答案 0 :(得分:1)
一种解决方案是使用Android的工作管理器通过http请求对您的服务器执行ping操作。您可以在用户登录时创建初始的OneTimeWorkRequest,并在每次执行时创建一个延迟5分钟的新OneTimeWorkRequest。当用户退出应用程序时,取消所有工作请求。
请参阅Jetpack库:https://developer.android.com/topic/libraries/architecture/workmanager
您需要对其体系结构进行更改的另一种解决方案是将Sockets与SocketIO之类的库一起使用。当用户登录通知服务器用户在线时,从您的应用程序连接套接字。当套接字断开连接服务器可以将用户标记为脱机时:https://socket.io/blog/native-socket-io-and-android/
另一种解决方案是将Firebase Realtime数据库用于在线状态系统。 Firebase给出了一个很好的示例:https://firebase.googleblog.com/2013/06/how-to-build-presence-system.html
答案 1 :(得分:0)
您可以在服务中编写此代码,并使用处理程序或RxJava每5分钟进行一次网络通话;
public class YourService extends Service{
public final Handler handler = new Handler();
@Override
public void onCreate() {
makeCallEvery5Min();
}
private void makeCallEvery5Min(){
runnable = new Runnable() {
@Override
public void run() {
// execute call here
}
handler.postDelayed(runnable, delay);
}
}
}
RXJava
private void makeCallEvery5min() {
Observable.interval(0, 5, TimeUnit.MINUTES)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(v -> your_network_call() );
}
答案 2 :(得分:-1)
如果用户已登录,则应具有用户ID。
现在尝试在用户登录会话中检查特定用户的用户ID。
注意:以下代码应添加到网页(jsp或servlet)中。