这里有一段代码,我使用postdelated和一些在主线程上执行的其他代码。我运行了几次,总是看到以下输出:
07-13 14:22:18.511 15376-15376/sample1.com.sample_1 d/main活动:i
= 0
…
07-13 14:22:18.601 15376-15376/sample1.com.sample_1 d/main活动:
简历07-13 14:22:18.601 15376-15376/sample1.com.sample_1
d/main活动:延迟后
从日志输出中可以看出,我的延迟是50毫秒并不重要。消息“postdelayed”是在大约100毫秒(601-511=90)之后键入的。看起来延迟的runnable被添加到了我的ui线程的消息队列的末尾。但不管怎样,有没有保证什么时候可以输入postdelayed?可以在for循环的中间键入吗?
package sample1.com.sample_1;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d("MainActivity", "postDelayed");
}
}, 10);
for (int i = 0; i < 10000; i++) {
Log.d("MainActivity", "i = " + i);
}
}
@Override
protected void onResume() {
Log.d("MainActivity", "onResume");
super.onResume();
}
}
最佳答案
还有来自其他服务和应用程序的日志,因此基于日志输出计算处理程序延迟将不正确。android上的日志记录机制有自己的队列,因此您的消息实际上可能由于队列中的其他日志而延迟。
我的建议是使用System.nanoTime()来计算处理器延迟之间的时间。据我所知,它给出了最精确的计时器值。
最后要回答你的问题,不,你不能精确指出行动将要发生的具体时间。有数以千计(如果不是数百万)的不同条件可能会延迟应用程序的操作,特别是如果它是异步操作。
编辑:该延迟不能保证50毫秒的延迟,但它可以保证“至少”50毫秒的延迟。