[Android] AsyncTask pausieren für Benutzereingabe

  • Java

    [Android] AsyncTask pausieren für Benutzereingabe

    Hallo,

    ich arbeite an einem BrainFuck Interpreter für Android. Den Code lasse ich dabei im Hintergrund von einem AsyncTask interpretieren. Jetzt habe ich aber ein Problem sobald ich "," also die Eingabe behandeln will.
    doInBackground ist eine while-Schleife, die "requestNumber()" (siehe folgender Text) in einem switch-case Block aufruft.
    Dadurch sollte doInBackground() pausiert werden und eine AlertDialog-Abfrage erscheinen.
    Dies habe ich momentan sehr unsauber per Looper.prepare() sowie Looper.loop() gelöst:

    Quellcode

    1. public void requestNumber()
    2. {
    3. Looper.prepare();
    4. AlertDialog.Builder alert = new AlertDialog.Builder(RunActivity.this);
    5. alert.setTitle("Input @ " + String.valueOf(cellPointer));
    6. final EditText input = new EditText(RunActivity.this);
    7. input.setSingleLine();
    8. input.setInputType(InputType.TYPE_CLASS_NUMBER);
    9. input.setText(String.valueOf(cells[cellPointer]));
    10. alert.setView(input);
    11. alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    12. @Override
    13. public void onClick(DialogInterface dialog, int which)
    14. {
    15. cells[cellPointer] = Integer.valueOf(input.getText().toString());
    16. Looper.myLooper().quitSafely();
    17. }
    18. });
    19. alert.setNegativeButton("Cancel", null);
    20. alert.show();
    21. Looper.loop();
    22. }


    Super unsauber ich weiß. Das Problem ist dazu, dass Looper.quitSafely() die komplette App einfrieren lässt. Ich habe gelesen, man solle den Looper nur einmal erstellen und ihn dann laufen lassen, jedoch macht das für meine Zwecke wenig sinn.
    Also meine Frage:
    Kennt jemand eine Möglichkeit "doInBackground()" zu pausieren um eine Benutzereingabe zu tätigen?
    Vielen Dank im Vorraus!
    Valerian

    PS: bitte entschuldigt meine Formattierung etc. Ich bin in Italien und mein Handyroaming ist recht begrenzt :(