服务在Thread.sleep

时间:2019-04-20 09:50:45

标签: java android

我有以下简单代码:

活动

private void myStartService(String action) {
    Intent intent = new Intent(this, MyService.class);
    intent.setAction(action);
    startService(intent);
}

public void onButtonClick(View v) {
    Log.d(TAG, "TEST: before");
    myStartService("action1");
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    myStartService("action2");
    Log.d(TAG, "TEST: after");
}

服务

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent.getAction().equals("action1")) {
        Log.d(TAG, "TEST: received action1");
    } else if (intent.getAction().equals("action2")) {
        Log.d(TAG, "TEST: received action2");
    }
}

问题在于此代码首先休眠3000毫秒,然后才在服务中收到action1action2

如果您看一下这个简单的输出(服务在Thread.sleep()之后收到操作),您就可以清楚地看到我在说什么:

2019-04-20 11:44:41.975 5599-5599/mypackage D/Activity: TEST: before
2019-04-20 11:44:44.980 5599-5599/mypackage D/Activity: TEST: after
2019-04-20 11:44:44.981 5599-5599/mypackage D/Service: TEST: received action1
2019-04-20 11:44:44.989 5599-5599/mypackage D/Service: TEST: received action2

这是日志输出的预期顺序。我该如何实现?

2019-04-20 11:44:41.975 5599-5599/mypackage D/Activity: TEST: before
2019-04-20 11:44:44.981 5599-5599/mypackage D/Service: TEST: received action1
2019-04-20 11:44:44.981 5599-5599/mypackage D/Service: TEST: received action2
2019-04-20 11:44:44.980 5599-5599/mypackage D/Activity: TEST: after

1 个答案:

答案 0 :(得分:0)

使用Thread.sleep代替使用Handler.postDelayed

public void onButtonClick(View v) {
    Log.d(TAG, "TEST: before");
    myStartService("action1");
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            myStartService("action2");
            Log.d(TAG, "TEST: after");
        }
    }, 3000);
}