0

Я занимаюсь автономным кэшированием. Я хочу, чтобы пользователь мог создавать события, даже когда он/она не работает. Для этого я использую обработчик, который проверяет каждую секунду, есть ли сетевое соединение или нет, и всякий раз, когда сетевое соединение есть ли он выполняет задачу, связанную с событием. Например, если пользователь хочет опубликовать комментарий, когда он/она находится в автономном режиме, тогда, когда он нажимает кнопку «пост», запускается обработчик, который будет размещать комментарий, когда на устройстве пользователя есть интернет-соединение. Но использование обработчика или потока не может быть лучшим выбором, так как они будут продолжать работать до тех пор, пока не будет установлено сетевое соединение, а также не будет проверять условие повторно. Есть ли другой лучший способ разрешить пользователю планировать события, когда он/она находится в автономном режиме и выполнять их каждый раз netconnection есть?Обработка офлайн-событий

mPostCommentImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


     if(isNetworkAvailable()) 
     { 
      postComment(mCommentEditText.getText().toString()); 
      hideKeypad(); 
      mCommentEditText.setText(""); 
     } 
     else 
     { 
     Toast.makeText(getActivity(),"You comment will be posted once net connection is there",Toast.LENGTH_LONG).show(); 
      comment= new Handler(); 
      hideKeypad(); 
      final String commenttext=mCommentEditText.getText().toString(); 


      comment.postDelayed(runnable = new Runnable() 
      { 
       public void run() { 

     addComment(videoid,commenttext,comment,runnable); 
      comment.postDelayed(runnable, 2000); 


       } 
      },2000); 
      refreshCommentList(); 
     } 
    } 


     }); 

public void addComment(String videoid,String commenttext, final Handler comment,final Runnable runnable) { 

    if (isNetworkAvailable()) { 
     CommentAPI.addComments(getApplicationContext(), videoid, commenttext, new APIResponseListener() { 
      @Override 
      public void onResponse(Object response) 
      { 
      comment.removeCallbacks(runnable); 
      } 


      @Override 
      public void onError(VolleyError error) 
      { 



      } 
     }); 
    } 

} 


private boolean isNetworkAvailable() 
    { 
     ConnectivityManager connectivityManager= (ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 

ответ