Android服务中每30秒运行一次服务?

时间:2017-12-06 09:18:28

标签: android android-intent service

我跟着this每隔5分钟运行一次服务

直到现在它的工作正常..但是我在TimeDisplay中添加了一个Intent for Next服务但它的工作正常仅在第一次但是第二个Activity没有运行每30秒......它只有在首次运行中工作..

这是MyService

    public class ServMain1 extends Service {

    private static final String TAG = "ServMain1";

    public static final int notify = 30000;
    private Handler mHandler = new Handler();
    private Timer mTimer = null;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Not yet implemented");
    }

   @Override
   public void onCreate() {

       if (mTimer != null) // Cancel if already existed
           mTimer.cancel();
       else
           mTimer = new Timer();   //recreate new
           mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);

   }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mTimer.cancel();    //For Cancel Timer
        Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
    }

    //class TimeDisplay for handling task
    class **TimeDisplay** extends TimerTask {
        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    // display toast
                    Toast.makeText(ServMain1.this, "ServMain1 : Service is running", Toast.LENGTH_SHORT).show();
                    startService(new Intent(ServMain1.this, ServMain2.class));
                }
            });
        }
    }
}

此处TimeDisplay我正在使用此功能启动第二项服务startService(new Intent(ServMain1.this, ServMain2.class));

我怎样才能为每一个30 Seconds祝酒。但是,除了那个吐司,我正在使用意图不起作用......

它仅在第一次工作......但我正在为每个30seconds

举杯

任何人都可以建议我如何使用这种活动

1 个答案:

答案 0 :(得分:1)

即使多次致电startService,服务也只会运行一次。

如果你想继续在你的处理程序中重新启动服务,你需要首先检查它是否已经运行,如果它已经在运行则终止它并调用startService post。

您可以使用

检查服务是否正在运行
private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

在你的处理程序中进行这些更改

       mHandler.post(new Runnable() {
    @Override
    public void run() {
        // display toast
        Toast.makeText(ServMain1.this, "ServMain1 : Service is running", Toast.LENGTH_SHORT).show();
        if(!isMyServiceRunning(ServMain2.class)){

            startService(new Intent(ServMain1.this, ServMain2.class));
        } else{
            stopService(ServMain2.class);
            startService(new Intent(ServMain1.this, ServMain2.class));

        }

    }
});