Я занимаюсь автономным кэшированием. Я хочу, чтобы пользователь мог создавать события, даже когда он/она не работает. Для этого я использую обработчик, который проверяет каждую секунду, есть ли сетевое соединение или нет, и всякий раз, когда сетевое соединение есть ли он выполняет задачу, связанную с событием. Например, если пользователь хочет опубликовать комментарий, когда он/она находится в автономном режиме, тогда, когда он нажимает кнопку «пост», запускается обработчик, который будет размещать комментарий, когда на устройстве пользователя есть интернет-соединение. Но использование обработчика или потока не может быть лучшим выбором, так как они будут продолжать работать до тех пор, пока не будет установлено сетевое соединение, а также не будет проверять условие повторно. Есть ли другой лучший способ разрешить пользователю планировать события, когда он/она находится в автономном режиме и выполнять их каждый раз 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();
}