Ich habe ein Android-Projekt von einem einzigen Layout mit einem ImageView zusammengesetzt.Android - Bitmap vom Timer Thread aktualisieren
public class MainActivity extends AppCompatActivity {
/* original and stretched sized bitmaps */
private Bitmap bitmapOriginal;
private Bitmap bitmapStretched;
/* the only view */
private ImageView iv;
....
}
Dieses Image wird durch diese runnable Funktion aktualisiert
runnable = new Runnable() {
@Override
public void run() {
iv.setImageBitmap(bitmapStretched);
}
};
und die runnable wird durch eine temporized JNI-Funktion läuft, auf einem Hintergrund-Thread ausgeführt wird, dass es 60-mal pro Sekunde nennen.
public void jniTemporizedCallback(int buf[]) {
/* set data to original sized bitmap */
bitmapOriginal.setPixels(buf, 0, origWidth, 0, 0, origWidth, origHeight);
/* calculate the stretched one */
bitmapStretched = Bitmap.createScaledBitmap(bitmapOriginal, width, height, false);
/* tell the main thread to update the image view */
runOnUiThread(runnable);
}
Nachdem ein Frame gezeichnet wurde, stürzt die App mit der folgenden Meldung ab.
Ich denke, das liegt daran, dass der Renderer das vorherige Bild des ImageView nicht vollständig gerendert hat und wütend wird.
Wenn ich entfernen runOnUiThread(runnable);
das Problem verschwinden (natürlich)
Wie kann dies vermeiden? Wie kann ich meine Anwendung mit dem OpenGL-Renderer synchronisieren?
Ich habe auch versucht Image und ziehen das Bitmap auf Leinwand in die OnDraw Funktion, aber ich habe das gleiche Ergebnis
Möge dies Ihnen helfen. http://stackoverflow.com/questions/5869114/loading-new-image-each-second –
versuchen Sie dies, um zu überprüfen, ob der vorherige Thread fertig ist oder nicht. Überprüfen Sie diese http://stackoverflow.com/questions/8799373/waiting-for-a-runnable-to-complete-before-running-another-runable – Abhishek