当我离开活动并返回活动时,活动会不断重启

问题描述 投票:2回答:1

我有两个活动,当我从活动A移动到B时,B继续重启或“刷新”,当我从B回到A时,它也会不断重启。代码非常大,我在这里发布我认为问题导致的区域:

  Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {
                deviceStatus();

                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

        }

    });
    t.start();

这是deviceStatus();

  public void deviceStatus(){
    try {
        RequestQueue requestQueue = Volley.newRequestQueue(InActivate.this);
        String URL = "http://gickuwait-dev.com/electionapi/api/DeviceStatus";
        JSONObject jsonBody = new JSONObject();

        jsonBody.put("device_PK", device_ID2);


        final String requestBody = jsonBody.toString();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {



                if(response.equals("true")){

                        Intent intent = new Intent(InActivate.this, Vote.class);
                        startActivity(intent);
                        finish();

                }else  if(response.equals("false")) {


                }
                // Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show();

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                Log.e("VOLLEY", error.toString());
            }
        }) {
            @Override
            public String getBodyContentType() {
                return "application/json; charset=utf-8";
            }

            @Override
            public byte[] getBody() throws AuthFailureError {
                try {
                    return requestBody == null ? null : requestBody.getBytes("utf-8");
                } catch (UnsupportedEncodingException uee) {
                    VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                    return null;
                }
            }

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {

                String responseString;
                String json = null;

                try {
                    json = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                responseString = String.valueOf(json).trim();
                ArrayList<DeviceStatusResponse> list = new ArrayList<DeviceStatusResponse>();
                Type listType = new TypeToken<List<DeviceStatusResponse>>() {}.getType();
                list = new Gson().fromJson(responseString, listType);

                device_Status = list.get(0).getIsActive().toString();
                //  Toast.makeText(getApplicationContext(), ""+device_Status+" null ", Toast.LENGTH_LONG).show();
                return Response.success(device_Status, HttpHeaderParser.parseCacheHeaders(response));
            }
        };

        requestQueue.add(stringRequest);
    } catch (JSONException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

在活动B中,我有相同的代码来检查数据库中的设备状态,任何帮助将不胜感激

java android multithreading
1个回答
0
投票

您可以使用Handle检查重复的任务。

     private Handler delayHandler = new Handler();
    private Runnable runnable = new Runnable() {
            @Override
            public void run() {
deviceStatus();
      driverDelayHandler.postDelayed(runnable, 1000);

            }
        };

不要忘记取消onStop方法。

 delayHandler.removeCallbacks(runnable);
© www.soinside.com 2019 - 2024. All rights reserved.