简体   繁体   中英

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM