这里有一段代码,我使用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毫秒的延迟。

10-08 17:04