我用来连接服务器的套接字:

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/

10-12 00:27
查看更多