2012-03-27 2 views
0

Ich lese auf SurfaceView und wie man es verwendet, und ich bin auf einige Informationen gestoßen, die besagt, dass ein SurfaceView standardmäßig auf false festgelegt hat, und dass es an Ihnen liegt, SurfaceView#onDraw() aufzurufen. Ich habe auch gelesen, dass RomainGuy sagte, dass dies standardmäßig getan wird, weil es effizienter ist. Meine Frage ist nun, wann sollten Sie anrufen SurfaceView#onDraw() in einem separaten Thread behandeln, und wann sollten Sie setzen nur View#willNotDraw() zu true, und rufen Sie einfach SurfaceView#invalidate(). Gibt es einen Unterschied zwischen den beiden, und verbessert man die Leistung mehr als die andere?Wann sollte SurfaceView vom UI-Thread gezeichnet werden?

Antwort

1

See:

http://developer.android.com/reference/android/view/View.html#setWillNotDraw(boolean)

Ich bin nicht sicher, wo Sie Ihre Informationen bekommen, aber zumindest die javadoc sagt, dass die meisten Benutzer dies false gesetzt wird Android, um es selbst onDraw Ereignisse zu senden. Was Ihre Frage, wann Sie dies tun sollten, würde ich sagen, es kommt darauf an, warum Sie ein SurfaceView verwenden.

Wenn Ihre Ansicht etwas Dynamisches anzeigt (z. B. für ein Spiel oder etwas, das eine enge Ereignisschleife hat), möchten Sie genau steuern, wann Updates durchgeführt werden, insbesondere wenn Sie die Informationen haben, um eines davon zu verwenden die detailliertere Formen der invalidate speichern die gesamte View neu erstellt. Sie werden nicht möchten, dass Android für Sie invalidate aufruft, und deshalb ist die Flagge da.

Wenn auf der anderen Seite, können Sie einfach statisch etwas zeichnen sind, macht es Sinn, Android UI-Stack die Ungültigkeits steuern zu lassen.

By the way, invalidate nur eine Anfrage bucht die View, so beachten Sie dies erneut zu ziehen, wenn Sie das Ereignis-Loop-Stil verwenden möchten (onDraw wird irgendwann werden nach Sie es nennen genannt).

Edit: einige Präzisierungen.

1

Mit SurfaceView.onDraw() und SurfaceView.invalidate() wird Surface wie eine normale Ansicht verhalten, und Sie werden für den zusätzlichen Aufwand mit Surface zugeordnet zahlen. Wenn Sie vom UI-Thread zeichnen möchten, verwenden Sie stattdessen eine normale Ansicht. Es ist einfacher und billiger.

Verwandte Themen