Существует фрагмент кода, в котором я использую postDelayed и некоторый другой код, выполняемый в основном потоке. Я побежал его несколько раз, и всегда видел следующий вывод:Когда runnables отправлены в postDelayed, фактически исполняемые на Android?
07-13 14: 22: 18.511 15376-15376/sample1.com.sample_1 D/MainActivity: я = 0
.. ..
07-13 14: 22: 18,601 15376-15376/sample1.com.sample_1 Д/MainActivity: onResume 07-13 14: 22: 18,601 15376-15376/sample1.com.sample_1 Д/MainActivity : postDelayed
As I см. из выхода журнала, не имеет значения, что моя задержка составляет 50 мс. Сообщение «postDelayed» вводится после примерно 100 мс (601-511 = 90). Похоже, что замедленная runnable добавлена в конец очереди сообщений моего потока пользовательского интерфейса. Но так или иначе, есть ли какая-либо гарантия того, когда набирается именно 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 ограничивает работу пользовательского интерфейса в основном потоке, чтобы предотвратить то, что вы хотите сделать. – Harlan
@ Харлон, я не уверен, что понял тебя. –