【问题标题】:Android - How to stop starting service interval while service on running?Android - 如何在服务运行时停止启动服务间隔?
【发布时间】:2017-11-29 06:35:51
【问题描述】:

我有一个名为 myService 的服务类,我使用间隔来运行该服务

代码如下:

public class myService extends Service {
    public Runnable mRunnable = null;
    IBinder mBinder = new LocalBinder();

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

    public class LocalBinder extends Binder {
        public myService getServerInstance() {
            return myService.this;
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        final Handler mHandler = new Handler();
        mRunnable = new Runnable() {
            @Override
            public void run() {
                Log.d("Service jalan", "beneran dah");
                DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                List<Contact> contacts = db.getAllContacts();
                for (Contact cn : contacts)
                {
                    int idsql = cn.getID();
                    if(String.valueOf(cn.getFlag()).equals("0")){
                        Log.d("Id", String.valueOf(cn.getID()) + " Flag :" + cn.getFlag());
                        sending a  = new sending(); //communicate to server
                        a.execute();
                    }
                    else
                    {
                        Log.d("Data kosong", "atau tidak ada flag = 0");
                    }
                }
                mHandler.postDelayed(mRunnable, 30 * 1000);
            }
        };
        mHandler.postDelayed(mRunnable, 30 * 1000);
        return super.onStartCommand(intent, flags, startId);
    }
}

问题:

当我的服务仍在 if statement 上运行但间隔已经循环 30 秒时,我的服务将再次启动,

我怎样才能避免这种情况?

【问题讨论】:

  • 请有其他想法?

标签: android service


【解决方案1】:

您可以在重启服务之前使用标志检查服务是否正在进行

 boolean isInProgress = false;
 mRunnable = new Runnable() {
            @Override
            public void run() {
                Log.d("Service jalan", "beneran dah");
                if(!isInProgress){
                isInProgress = true;
                DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                List<Contact> contacts = db.getAllContacts();
                for (Contact cn : contacts)
                {
                    int idsql = cn.getID();
                    if(String.valueOf(cn.getFlag()).equals("0")){
                        Log.d("Id", String.valueOf(cn.getID()) + " Flag :" + cn.getFlag());
                        sending a  = new sending(); //communicate to server
                        a.execute();
                    }
                    else
                    {
                        Log.d("Data kosong", "atau tidak ada flag = 0");
                    }
                  }
                 isInProgress = false;
               }
                mHandler.postDelayed(mRunnable, 30 * 1000);
            }

【讨论】:

  • 我有一个警告,isInProgress always true,当我简化它时,它会在没有if(!isInProgress){ 的情况下返回到我的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
相关资源
最近更新 更多