如何延迟功能调用?

时间:2018-09-29 06:58:46

标签: java android

public class NotificationReceivedCheckDelivery extends NotificationExtenderService {
   @Override
   protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {
      OverrideSettings overrideSettings = new OverrideSettings();

      overrideSettings.extender = new NotificationCompat.Extender() {
         @Override
         public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
            // Sets the background notification color to Yellow on Android 5.0+ devices.
            return builder.setColor(new BigInteger("FFFFEC4F", 16).intValue());
         }
      };

      OSNotificationDisplayedResult displayedResult = displayNotification(overrideSettings);
    Log.d("ONES",receivedResult.payload.title);
      JSONObject AdditionalData = receivedResult.payload.additionalData;
        Log.d("Adata",AdditionalData.toString());

      String uuid= null;
      try{
        //   {"uuid":"adddd"}
          uuid = AdditionalData.getString("uuid");

      }
      catch (JSONException e){
          Log.e("Error JSON","UUID",e);
      }



                // Create Object and call AsyncTask execute Method
                new FetchNotificationData().execute(uuid);

      return true;
   }



private class FetchNotificationData extends AsyncTask<String,Void, String> {

        @Override
        protected String doInBackground(String... uuids) {
            // These two need to be declared outside the try/catch
            // so that they can be closed in the finally block.
            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;

            // Will contain the raw JSON response as a string.
            String forecastJsonStr = null;

            try {

                URL url = new URL("http://test.com/AppDeliveryReport?uuid="+uuids[0]);


                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();

                // Read the input stream into a String
                InputStream inputStream = urlConnection.getInputStream();
                StringBuffer buffer = new StringBuffer();
                if (inputStream == null) {
                    // Nothing to do.
                    return null;
                }
                reader = new BufferedReader(new InputStreamReader(inputStream));

                String line;
                while ((line = reader.readLine()) != null) {
                    // Since it's JSON, adding a newline isn't necessary (it won't affect parsing)
                    // But it does make debugging a *lot* easier if you print out the completed
                    // buffer for debugging.
                    buffer.append(line + "\n");
                }

                if (buffer.length() == 0) {
                    // Stream was empty.  No point in parsing.
                    return null;
                }
                forecastJsonStr = buffer.toString();
                return forecastJsonStr;
            } catch (IOException e) {
                Log.e("PlaceholderFragment", "Error ", e);
                // If the code didn't successfully get the weather data, there's no point in attemping
                // to parse it.
                return null;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final IOException e) {
                        Log.e("PlaceholderFragment", "Error closing stream", e);
                    }
                }
            }

        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Log.i("json", s);
        }
}
}

我想延迟随机几秒钟调用FetchNotificationData函数。 这是传送报告网址请求功能。每当在应用程序中收到来自onesignal的通知时,它将调用该URL。我不想立即爆炸大量请求的服务器。因此,我想将呼叫延迟随机的几秒钟,以便服务器在给定的时间必须处理几个呼叫。

3 个答案:

答案 0 :(得分:4)

您可以使用处理程序延迟对函数的调用

  new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(Splash.this, "I will be called after 2 sec", 
                                                              Toast.LENGTH_SHORT).show();
                    //Call your Function here..
                }
            }, 2000); // 2000 = 2 sec

答案 1 :(得分:3)

您可以像这样使用Handler

  Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
               // your FetchNotificationData function
            }
        },timeInMiliSec);

只记得将Handler导入为android.os,而不是java.util.logging

答案 2 :(得分:0)

 timer = new Timer();
 final int FPS = 3;
 TimerTask updateBall = new UpdateBallTask();
 timer.scheduleAtFixedRate(updateBall, 0, 1000 * FPS);

班级:

class UpdateBallTask extends TimerTask {
    public void run() {
        // do work
    }
}

///或

  final Handler handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
           handler.postDelayed(this, 100);
           // do work
                handler.removeCallbacksAndMessages(null);          
        }
    };
   handler.postDelayed(r, 100);