Die Android-Seite springt und die vorherige Seite wird zerstört, was zu einem Fehler führt

Beschreibung des Problems: Auf der A-Seite gibt es eine Schaltfläche, mit der Sie das zuzuschneidende Galeriefoto auswählen und dann anzeigen können. Dies ist eine einfache Funktion. Auf einem Mi 9-Mobiltelefon wird ein Fehler gemeldet. Das zugeschnittene Foto zeigt immer wieder die Meldung: „Beim Speichern ist ein Fehler aufgetreten und das Speichern ist fehlgeschlagen . “

Problemanalyse: Erstens wird diese Aufforderung vom System ausgegeben, daher haben wir dem System eine falsche Meldung gegeben, was dazu geführt hat, dass das System eine solche Aufforderung ausgegeben hat. An dem Schritt der Bildauswahl ist definitiv nichts auszusetzen, da wir dem System in diesem Schritt keine Daten übermittelt haben und beim Zuschneiden des Bildes ein Fehler aufgetreten ist, da wir in diesem Schritt einen Pfad dafür angeben müssen sollte nach dem Zuschneiden gespeichert werden, und der Zuschneidecode lautet:

crop(data.getData(), getOutCropUri());

    private Uri getOutCropUri() {
      
        Debug.i(TAG, "preCroppedPath:" + preCroppedPath);

        File outFile = new File(preCroppedPath);
        File parentFile = outFile.getParentFile();
        if (parentFile != null) {
            if (!parentFile.exists()) {
                Debug.i(TAG, "getOutCropUri :parent: is not exists");
                parentFile.mkdirs();
            }
        }
        return Uri.fromFile(outFile);
    }

 
private void crop(Uri inUri, Uri outUri) {
        if (inUri == null) {
            return;
        }
        Debug.i(TAG, inUri + "crop" + outUri);
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setDataAndType(inUri, "image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 2);
        intent.putExtra("scale", true);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outUri);
        intent.putExtra("return-data", false);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
        intent.putExtra("noFaceDetection", true);
        startActivityForResult(intent, REQ_CROP);
    }

Ich habe den Pfad ausgedruckt, der Pfad ist - ": file:///null/dial_bg.png, Sie können sehen, dass in der Mitte des Pfades eine Null steht. Warum es null ist, kann ich nicht verstehen. Auf anderen Mobiltelefonen lautet der normale Pfad also: file: //storage/emulated/0/Android/data/XXX/files/watch_skin_local/ca8200bd5cf1b1e6f5f70794116adff3 /dial_bg.png, der rote Teil ist zu sehen, weil Die Mitgliedsvariable Das heißt, preCroppedPath ist leer. Diese Variable wird in oncreate zugewiesen. Ich kann klarstellen, dass dieser Pfad nicht leer ist, bevor ich ein Foto auswähle. Warum diese Mitgliedsvariable nach der Auswahl eines Fotos leer ist. Ich schaute mir das Protokoll genauer an und stellte fest, dass nicht nur diese Mitgliedsvariable leer war, sondern alle Mitgliedsvariablen leer wurden. Ich schaute noch einmal nach und stellte fest, dass die Seite A vollständig zerstört wurde, als sie zum ausgewählten Album sprang. Verdammt, es ist wirklich verrückt. Ist der App-Speicherverlust so schwerwiegend? Beim Springen zur Seite ist nicht genügend Speicher vorhanden, wodurch die Ressourcen der vorherigen Seite zurückgefordert werden. Zur Überprüfung habe ich ein neues Projekt mit nur zwei Seiten erstellt und A ist zu B gesprungen. Dann habe ich festgestellt, dass A auch in diesem Fall nach erfolgreicher Erstellung der B-Seite immer noch onDestory ist. Verdammt, ich werde verrückt, die Konfiguration dieses Telefons ist zu niedrig? Bist du sicher, dass es Mi 9 ist? Ein Kampfengel, der behauptet, gut auszusehen und kampffähig zu sein? ? ? Zerschmettere es, schrotte das Telefon, zerstöre es und liebe es nicht mehr. Nachdem ich eine Tasse Tee getrunken und mich beruhigt habe, habe ich das Gefühl, dass es kein Problem mit der Konfiguration des Mobiltelefons ist. Könnte es sein, dass in den Entwickleroptionen etwas aktiviert wurde, was dazu führt, dass die vorherige Schnittstelle jedes Mal zerstört wird? neue Seite wird geöffnet. Da ich schlau war, ging ich zu den Entwickleroptionen und schaute nach: „Hey, was ist das? Aktivität nicht behalten“ = Aktivität? fallen! geschlossen! ! ! Also lassen Sie es noch einmal laufen, alles klar. Es tut mir leid, Herr Lei, ich habe Sie falsch verstanden, und es tut mir leid für Mi 9. Bei näherer Betrachtung ist diese Option in den Entwickleroptionen jedes Mobiltelefons verfügbar.

Bisher wurde die Ursache des Problems gefunden, und natürlich kann es durch Ausschalten dieser Option gelöst werden, aber der Kunde ist Gott, Sie können Ihrem Gott sagen, dass Sie diesen Knopf nicht öffnen dürfen. Kippen. Daher müssen wir die zu speichernden Daten in onSaveInstanceState speichern und sie dann in oncreate herausnehmen.


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        preCroppedPath=savedInstanceState==null?null:savedInstanceState.getString("data");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("data",preCroppedPath);
    }

Bisher ist das Problem wirklich gelöst.

Tagesaufzeichnungen:

Bevor Sie es wissen, ist das Ende des Jahres. In meinem Geburtsjahr hatte ich ein reibungsloses Leben. Um genau zu sein, war dieses Jahr ein Jahr der Mittelmäßigkeit. Ich habe kein Haus gekauft, mein Gehalt ist nicht gestiegen und ich hatte kein Date. Ich habe geweint. Der größte Durchbruch war die Teilnahme an Trailwalking-Aktivitäten. Ich bin mehr als 10 Stunden gelaufen und 50 km gelaufen. Das hat mein Leben für lange Zeit ruiniert. Ich habe auch Kotlin gelernt und die Funktionen werden grundsätzlich mit Kotlin implementiert. Es fühlt sich immer noch sehr nützlich an. Es ist sehr bequem zu verwenden. Aber ich muss trotzdem sagen, Java ist die beste Sprache. Ich weiß nicht, ob es daran liegt, dass ich älter werde, meine Tränen immer weniger werden, ich immer weniger rede und immer lieber allein bin. Meine Freunde sagten, ich sei in das Alte eingetreten Alter im Voraus, ah ha ha ha, ich denke, das ist ein langsames Leben. Ich mag diese Art von Leben immer noch sehr, die Zusammenfassung dieses Jahres ist so, im Allgemeinen 3 Sterne. Nächstes Jahr hoffe ich, eine Sprache zu lernen und eine Gehaltserhöhung zu bekommen! ! ! Komm schon! ! !

Einzelzyklus „Hirtenlied“

Supongo que te gusta

Origin blog.csdn.net/androidzmm/article/details/103764082
Recomendado
Clasificación