如果连接不可用,则停止/暂停/休眠服务,如果可用则恢复

时间:2015-08-28 15:32:41

标签: java android android-service intentservice android-service-binding

我有一个应用程序,我在其中创建了一个服务MyService.class 现在MyService.class使用bindService()绑定到我的活动,但我希望我的服务在后台运行,即使活动已经破坏了自己。

所以我启动了服务,然后将其绑定如下:

private void doBindService() {
  if (!isServiceBound){
    Log.d(LOG_TAG, "Binding Service...");
    if (mBtAdapter != null && mBtAdapter.isEnabled()){
      Intent intent = new Intent(MyActivity.this, MyService.class);
      startService(intent);
      bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
    }
  }
}

在MyActivity的onDestroy方法中,我解除了服务的绑定

现在我的服务运行顺利,直到与远程设备的连接中断。如果连接断开,我想暂停/暂停/停止此服务,然后在每60秒后尝试启动服务/连接。

我试过这个但是没有用。

private void stopService() {
    doUnbindService();
    stopService(new Intent(MyActivity.this, MyService.class));
    startService(new Intent(MyActivity.this, MyService.class));
}

请任何帮助将不胜感激。在此先感谢!!!

2 个答案:

答案 0 :(得分:0)

试试这个

  • 创建一个执行所需操作的方法
  • 创建一个Thread或Runnable类
  • 调用您在Thread或Runnable
  • 的run()中创建的Helper方法
  • 服务onStartCommand内部启动线程,如果连接可用
  • thread.wait / sleep如果没有连接

答案 1 :(得分:0)

我不确定我是否了解您的要求。

使用此解决方案,您可以播放,暂停和停止服务。 并且该服务每隔60秒执行一些工作

public class MyService extends Service {

    public static boolean testConnexion;

    private Timer timer;

    @Override
    public void onCreate() {
        super.onCreate();
        timer = null;
        testConnexion = true;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        if (timer != null) {
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    if (testConnexion) {
                        //StartConnexion
                    }
                }
            }, 1000, 60000);
        }

        return START_NOT_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        timer.cancel();
    }
}

在任何活动中 开始或停止服务。 (您可以根据需要多次调用startService,只会有一个人将运行。)

if (v.getId() == R.id.startService) {
            Intent intent = new Intent(this, MyService.class);
            startService(intent);
        } else if (v.getId() == R.id.stopService) {
            Intent intent = new Intent(this, MyService.class);
            stopService(intent);
        }

暂停操作(但不是终止服务)

MyService.testConnexion = false;

重启

MyService.testConnexion = true;

您的服务与您的活动无关。 如果您的活动中断,您的服务将继续运行。

我希望这可以帮到你