【发布时间】:2016-11-15 23:11:24
【问题描述】:
有一段代码我使用 postDelayed 和一些在主线程上执行的其他代码。我运行了几次,总是看到以下输出:
07-13 14:22:18.511 15376-15376/sample1.com.sample_1 D/MainActivity: i = 0
....
07-13 14:22:18.601 15376-15376/sample1.com.sample_1 D/MainActivity: onResume 07-13 14:22:18.601 15376-15376/sample1.com.sample_1 D/MainActivity: postDelayed
正如我从日志输出中看到的,我的延迟是 50 毫秒并不重要。大约 100 毫秒 (601 - 511 = 90) 后输入消息“postDelayed”。看起来延迟的可运行对象已添加到我的 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 限制主线程中的UI操作是为了防止你想做的事情。
-
@Harlon,我不确定我是否理解你。
标签: android android-handler postdelayed