安卓系统服务在循环中崩溃



我有一个向url发送错误的服务,这个服务在其他服务中很好,但当我在self中出现错误时,会陷入非常糟糕的循环。

public class Error_Service extends Service {
    Context context;
    RequestPackage RP;
    String Value;
    G g;
    Internet_Connect IC;
    public final static String MY_ACTION_E = "MY_ACTION_E";
    @Override
    public void onCreate() {
        context = this;
        IC = new Internet_Connect(context);
    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handleStart(intent, startId);
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
    void handleStart(Intent intent, int startId) {
        String ww = null;
        try {
            Log.i("ASDASASDAS",ww);
        }catch (Exception e){
            g = new G();
            new GetErrors(context);
            Exception_String EX =new Exception_String();
            GetErrors.SendErrors("43", EX.ValueEX(e), g.VersionCode());
            return;
        }
        RP = (RequestPackage) intent.getSerializableExtra("MyValue");
        try {
            Value =  new ErrorService().execute(RP).get();
        } catch (InterruptedException e) {
            e.printStackTrace();
            if (IC.getConnectivityStatus()) {
                g = new G();
                new GetErrors(context);
                Exception_String EX = new Exception_String();
                GetErrors.SendErrors("43", EX.ValueEX(e), g.VersionCode());
            }
        } catch (ExecutionException e) {
            e.printStackTrace();
            if (IC.getConnectivityStatus()) {
                g = new G();
                new GetErrors(context);
                Exception_String EX = new Exception_String();
                GetErrors.SendErrors("43", EX.ValueEX(e), g.VersionCode());
            }
        } finally {
            ThreadFinish_Send thread_finish = new ThreadFinish_Send();
            thread_finish.start();
        }
    }
    public class ErrorService extends AsyncTask<RequestPackage,String,String>{
        @Override
        protected String doInBackground(RequestPackage... params) {
            BufferedReader reader = null;
            String uri = params[0].getUri();
            if (params[0].getMethod().equals("GET")) {
                uri += "?" + params[0].getEncodedParams();
            }
            try {
                URL url = new URL(uri);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod(params[0].getMethod());
                StringBuilder sb = new StringBuilder();
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "n");
                }
                return sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
                if (IC.getConnectivityStatus()) {
                    g = new G();
                    new GetErrors(context);
                    Exception_String EX = new Exception_String();
                    GetErrors.SendErrors("43", EX.ValueEX(e), g.VersionCode());
                    return null;
                }
                return null;
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                        if (IC.getConnectivityStatus()) {
                            g = new G();
                            new GetErrors(context);
                            Exception_String EX = new Exception_String();
                            GetErrors.SendErrors("43", EX.ValueEX(e), g.VersionCode());
                            return null;
                        }
                        return null;
                    }
                }
            }
        }
    }
    public class ThreadFinish_Send extends Thread{
        @Override
        public void run() {
            Intent intent = new Intent();
            intent.setAction(MY_ACTION_E);
            intent.putExtra("MVE",Value);
            sendBroadcast(intent);
            stopSelf();
        }
    }
}

我能做什么?

我认为你应该重写这个,太可怕了。

*您的命名令人困惑(Error_Service和ErrorService,真的吗?)

*你使用了无法识别的变量名(G到底是什么)

*在主线程上使用AsyncTask.execute.get()。你几乎不应该使用。get——如果你认为你需要,你可能错了。如果你在主线上,你总是错的。

*你有一个finally,它启动了一个新的线程,只是为了激发一个意图。为什么?实际上没有任何可能的理由在那里使用线程。

*您在十几个地方粘贴了相同的错误处理代码副本。

这段代码实际上是我很长一段时间以来看到的最糟糕的代码之一。把它扔掉,重新开始。

无论你在做什么,错误处理代码都是你的直接问题。这是错误日志记录服务。如果它不能记录另一个错误,为什么它能够记录自己的错误?当它失败时,它需要无声地失败。

相关内容

  • 没有找到相关文章

最新更新