Es gibt ein Stück Code, wo ich postDelayed und einige andere Code auf den Haupt-Thread ausgeführt. Ich lief es ein paar Mal und sah immer die folgende Ausgabe:Wann werden in postDelayed veröffentlichte Runnables tatsächlich auf Android ausgeführt?
07-13 14: 22: 18,511 15.376-15.376/sample1.com.sample_1 D/MainActivity: i = 0
.. ..
07-13 14: 22: 15.376 bis 15.376 18,601/sample1.com.sample_1 D/MainActivity: onResume 07-13 14: 22: 15.376 bis 15.376 18,601/sample1.com.sample_1 D/MainActivity : postDelayed
Wie ich Aus der Log-Ausgabe ist es nicht wichtig, dass meine Verzögerung 50 ms beträgt. Die Nachricht "postDelayed" wird nach ca. 100 ms (601 - 511 = 90) getippt. Es sieht so aus, als ob das verzögerte Runnable am Ende der Nachrichtenwarteschlange meines UI-Threads hinzugefügt wird. Aber gibt es irgendeine Garantie dafür, wann genau postDelayed getippt wird? Kann es in der Mitte der for-Schleife eingegeben werden?
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 beschränkt die UI-Operation im Haupt-Thread ist, um die Dinge zu verhindern, die Sie tun möchten. – Harlan
@Harlon, ich bin mir nicht sicher, ob ich dich verstanden habe. –