我有以下简单代码:
活动
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毫秒,然后才在服务中收到action1
和action2
。
如果您看一下这个简单的输出(服务在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
答案 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);
}