Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why the code in schedule Task Execution fixed Rate not working?

I am trying to add feature of Sheduled Task in android to do something after a time like I want to know whenever user loss his internet connection then I want to make a alert dialog. So I am doing it using Sheduled Task Execution but whenever I putted my run code in Runnable, Task didnot work.

Important is I am doing this in service class

CODE IS

package com.example.sid.marwadishaadi.LoginHistory;

import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
 import android.os.IBinder;
import android.provider.Settings;
   import android.support.v7.app.AlertDialog;
  import android.util.Log;
     import android.widget.Toast;

    import java.util.concurrent.Executors;

   import java.util.concurrent.ScheduledExecutorService;
  import java.util.concurrent.TimeUnit;

     import static com.bumptech.glide.gifdecoder.GifHeaderParser.TAG;

       public class OnClearFromRecentService extends Service {

            @Override
            public IBinder onBind(Intent intent) {
                return null;
            }

            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                Log.e("ClearFromRecentService-", "-----------------------------------------Service Started");
                SharedPreferences sharedPreferences=getSharedPreferences("userinfo",MODE_PRIVATE);
                SharedPreferences.Editor edtr=sharedPreferences.edit();
                String id=sharedPreferences.getString("customer_id","");
                Log.e(TAG, "onStartCommand: .........................."+id);
                if(isOnline()) {
                    Toast.makeText(this, "You are online", Toast.LENGTH_SHORT).show();
                }

                ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
                scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
                    public void run() {                            

                        Log.i(TAG, "run: ----I'm running after 15 seconds");
                        if(isOnline()) {
                            //Dummy TODO, you can do something if you want, 
                            Toast.makeText(OnClearFromRecentService.this, "You are not online", Toast.LENGTH_SHORT).show();
                        }

                        else{
                            Log.i(TAG, "run: --- exited from here or not :::: yes ");
                            AlertDialog.Builder network =new AlertDialog.Builder(OnClearFromRecentService.this);
                            network.setTitle("No Internet");
                            network.setMessage("Please check your internet connection or go to the internet option by clicking #settings");
                            network.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    getApplicationContext().startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                                }
                            });
                            network.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    Intent intent = new Intent(Intent.ACTION_MAIN);
                                    intent.addCategory(Intent.CATEGORY_HOME);
                                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    startActivity(intent);
                                }
                            });
                            network.setCancelable(false);
                            AlertDialog alertDialog = network.create();
                            alertDialog.show();


                        }

                    }
                }, 0, 15, TimeUnit.SECONDS);

                return START_NOT_STICKY;
            }

        public boolean isOnline() {
    ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = conMgr.getActiveNetworkInfo();

    if(netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()){
        Toast.makeText(getApplicationContext(), "No Internet connection!", Toast.LENGTH_LONG).show();
        return false;
    }
    return true;
}



            @Override
            public void onDestroy() {
                super.onDestroy();
                Log.e("ClearFromRecentService-", "-----------------------------------Service Destroyed");
            }

            @Override
            public void onTaskRemoved(Intent rootIntent) {
                Log.e("Clearvi--------------", "---------------------------------END");
                //Code here

                stopSelf();
            }


         }

when I did not doing something in sheduled task and printing single line then work fine like

log.e("","I'm running after 15 sec") -->> print line in log

but when I put my code then it not work,like code did not run.

Can Anyone suggest something,it will be really helpful for noob.

like image 256
Tech Team Avatar asked Oct 29 '22 05:10

Tech Team


1 Answers

Wrap your run method in try-catch block.

Just a guess: An exception is being thrown. A ScheduledExecutorService halts silently if it encounters an Exception.

The run method’s code should always be surrounded by a try-catch to handle and absorb any thrown Exception.

If you try to make a Looper before try catch and make that open then it will work fine because You cannot handle an UI thread from a working thread.

like image 62
Kaushal28 Avatar answered Nov 10 '22 18:11

Kaushal28