首页 > 解决方案 > SocketServer.accept() 使应用程序崩溃或有时无法正常工作

问题描述

每当我称之为SocketServer强制关闭应用程序时。如果我在后台服务中运行它,那么它会跳过该代码。

public void run() {
            try {
                //Log.e("Debugging Data: ", "-------------->>>>>     Here  "+LocalServerThread.getState());
                if (LocalServerThread.getState() == Thread.State.RUNNABLE) {
                    try {
                        if(socClient!=null) {
                            ServerAsyncTask serverAsyncTask = new ServerAsyncTask();
                            serverAsyncTask.execute(new Socket[]{socClient});
                        }
                    }
                    catch(Exception ex)
                    {
                        Log.e("Debugging Data: ", "-------------->>>>>     Server ERROR  "+ex.getMessage());
                    }
                }
            }
            catch(Exception ex)
            {
                Log.e("Debugging Data: ", "Not Running");
                Log.e("Debugging Data: ", "New Thread Created");

                LocalServerThread = new Thread() {
                    @Override
                    public void run() {
                        try {
                            //ServerSocket socServer = new ServerSocket(8088);
                            while (true)
                            {
                                socServer=null;
                                socServer = new ServerSocket(5000);
                                Log.e("Debugging Data: ", "-------------->>>>>     1  ");
                                socClient = socServer.accept();
                                Log.e("Debugging Data: ", "-------------->>>>>     2  ");
                                //Log.e("Debugging Data: ", "New Thread Running");
                                if(socClient==null) {
                                    Log.e("Debugging Data: ", "SOC Client nULL");
                                    socClient = socServer.accept();
                                    Log.e("Debugging Data: ", "New SOC Client Created");
                                }
                                ServerAsyncTask serverAsyncTask = new ServerAsyncTask();
                                serverAsyncTask.execute(new Socket[]{socClient});
                            }
                        } catch (IOException e) {
                            Log.e("Debugging Data: ", "New Thread Error  "+e.getMessage());
                            e.printStackTrace();
                        }
                    }
                };

                LocalServerThread.start();
                Log.e("Debugging Data: ", "-------------->>>>>     Here2  "+LocalServerThread.getState());
            }
}

标签: androidandroid-serviceandroid-service-bindingandroid-background

解决方案


推荐阅读