我用来连接服务器的套接字:
Socket requestSocket.connect(new InetSocketAddress(a, 6666), 3000);
它始终保持良好的运行状态,除非设备在空闲模式下保持较长时间(例如30分钟左右)。 30分钟后,如果我使设备进入唤醒状态,并尝试通过我的应用与服务器联系,则不会引发任何异常。这表明我的套接字连接仍处于 Activity 状态。但是,当我在服务器端检查时,此处未接收到相同的数据。
最佳答案
电池方式是与startForground一起使用后台服务
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
onHandleIntent(intent);
return START_STICKY;
}
protected void onHandleIntent(Intent intent) {
if (intent != null) {
Notification.Builder builder = new Notification.Builder(getBaseContext())
.setContentTitle("")
.setContentText("Your content text");
startForeground(1, builder.build());
Socket requestSocket.connect(new InetSocketAddress(a, 6666), 3000);
}
}
即使您的应用已关闭或已从最近的应用中删除,此服务也永远不会暂停/关闭您的套接字连接。
如果要从后台服务更新UI,则可以使用从UI绑定(bind)服务。
@Override
public IBinder onBind(Intent intent) {
if (TweetCollectorService.class.getName().equals(intent.getAction())) {
Log.d(TAG, "Bound by intent " + intent);
return apiEndpoint;
} else {
return null;
}
}
关于java - 屏幕变黑后,Java Android套接字立即被杀死,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46558069/