C
cederick
Neues Mitglied
- 0
Ich habe den Fehler gefunden, damit ist der Thread beantwortet es ist aber eine folge Frage entstanden die hier:
while Schleife macht Probleme im neuen Thread
zu finden ist.
Ich habe einen Fehler der scheinbar kein fehler ist...
Ich habe einen ViewFlipper der in und out animationen hat die in animationen bekommen ein Listener zugewiesen:
Wenn jetzt der ladebildschirm (child 4) angezeigt wird, wird die Surface_view gestartet, das bedeutet eine weitere Klasse wird initialisiert und in dieser Klasse wird sofort ein Thread gestartet:
dann startet diese run metode:
Die while schleife ist nur um das laden von Daten zu simmulieren, "running_listener.onisrunning(isrunning);" startet im main Thread den nächsten schritt (text wird angezeigt und view wird clickable).
Um jetzt endlich zu meinem Problem zu kommen, wenn der Thread gestartet wird scheint in 7 von 10 Fällen der mainthread beschäftigt zu sein, ich habe das herausgefunden in dem ich nach
" if (child == 4 && !started) {
started = true;
start_sv(true);
", einen Dialog gestartet habe und dieser ist erst nach einer Zeit, die der Zeit die für die while-schleife benötigt wird, aufgetaucht. Außerdem wird in diesen 7 von 10 fällen ein schwarzer Bildschirm angezeigt obwohl der Ladebildschirm einen weißen background hat, erst wenn auch der Text angezeigt werden soll (nach der while-schleife) wird auch der Ladebildschirm richtig angezeigt. Der Mainthread hat während der Ladezeit nichts zu tun außer den Ladebildschirm sichtbar zu machen, dann wartet er auf das Signal (durch "running_listener.onisrunning(isrunning);") um die schrift auf dem Ladebildschirm anzuzeigen und die View Clickable zu machen usw.
Mir ist klar das OnanimationEnd zu früh ausgelöst wird und es deshalb einen schwarzen Bildschirm gibt. Das Problem ist nur das dieser so lange angezeigt wird.
Nachdem der Text angezeigt wurde funktioniert übrigens alles wieder und in den 3 von 10 Fällen funktioniert die App auch normal.
while Schleife macht Probleme im neuen Thread
zu finden ist.
Ich habe einen Fehler der scheinbar kein fehler ist...
Ich habe einen ViewFlipper der in und out animationen hat die in animationen bekommen ein Listener zugewiesen:
Code:
@Override
public void onAnimationEnd(Animation animation) {
int child = vf.getDisplayedChild();
Integer index_of_last = vf.indexOfChild(findViewById(R.id.end_of_vf));
if ( child == index_of_last) {
setContentView(MainActivity.this.fl);
if (!MainActivity.this.fl.getChildAt(0).equals(surf_view)) {
MainActivity.this.fl.addView(surf_view, 0);
}
}
if (child == 4 && !started) {
started = true;
start_sv(true);
}
if (child == 3 || child == 1) {
vf.showNext();
}
}
Code:
public void surf_view_resume() {
isrunning=true;
this_thread = new Thread(this);
this_thread.start();
}
Code:
@Override
public void run() {
int i=0;
while(i<=1000000000){
i++;
}
h.post(new Runnable() {
@Override
public void run() {
running_listener.onisrunning(isrunning);
calc.calc_resume();
}
});
while (isrunning) {
if (holder.getSurface().isValid()&& !calc.isStartcalc()) {
calc.setStartcalc(true);
Canvas canvas = holder.lockCanvas();
setcanvas(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
}
Um jetzt endlich zu meinem Problem zu kommen, wenn der Thread gestartet wird scheint in 7 von 10 Fällen der mainthread beschäftigt zu sein, ich habe das herausgefunden in dem ich nach
" if (child == 4 && !started) {
started = true;
start_sv(true);
", einen Dialog gestartet habe und dieser ist erst nach einer Zeit, die der Zeit die für die while-schleife benötigt wird, aufgetaucht. Außerdem wird in diesen 7 von 10 fällen ein schwarzer Bildschirm angezeigt obwohl der Ladebildschirm einen weißen background hat, erst wenn auch der Text angezeigt werden soll (nach der while-schleife) wird auch der Ladebildschirm richtig angezeigt. Der Mainthread hat während der Ladezeit nichts zu tun außer den Ladebildschirm sichtbar zu machen, dann wartet er auf das Signal (durch "running_listener.onisrunning(isrunning);") um die schrift auf dem Ladebildschirm anzuzeigen und die View Clickable zu machen usw.
Mir ist klar das OnanimationEnd zu früh ausgelöst wird und es deshalb einen schwarzen Bildschirm gibt. Das Problem ist nur das dieser so lange angezeigt wird.
Nachdem der Text angezeigt wurde funktioniert übrigens alles wieder und in den 3 von 10 Fällen funktioniert die App auch normal.
Zuletzt bearbeitet: