Hendelser lastes inn og kjøres på hovedtråden, og hvis den første hendelsen i hovedtråden ikke er ferdig, kommer du til den andre hendelsen, akkurat som andre programmer i hovedtråden, og venter til den forrige er ferdig før du behandler neste eller et annet program eller hendelse i hovedtråden.
Ovenstående er, jeg innkapslet et objekt selv, og i objektet innkapslet jeg en hendelse selv.
Jeg behandler data på en måte å abonnere på hendelser, som bildeannotasjonen,
Fordi hendelsen jeg abonnerte på var en lest txt-fil, og min txt-fil hadde 50 000 linjer, noe som gjorde at hendelsesmetoden ble utløst 50 000 ganger.
Da jeg kjørte programmet, oppdaget jeg at grensesnittet mitt var i en tilstand av suspendert animasjon, og jeg visste at det måtte være et problem der.
Jeg trodde først det var manipuleringen av UI-kontrollene på denne måten som forårsaket falsk død.
Deretter, steg for steg, ble det funnet at når man la til data i settet, hadde det allerede gått inn i en tilstand av suspendert animasjon.
hvorfor??? Til slutt fant jeg ut på internett at hendelsen er i hovedtråden, og hvis den første hendelsen ikke blir behandlet, vil den blokkere kjøringen av neste hendelse.
Jeg forsto stort sett det jeg bestilte, for å si det rett ut: 50 000 hendelser førte til at programmet ble blokkert, og så gikk jeg inn i en tilstand av suspendert animasjon.
Løsning:
For noen enkle hendelser, som ikke vil føre til utførelse av et stort antall hendelsesmetoder, kan skrives direkte inn i hendelsesmetoden.
For et stort antall hendelsesmetoder som kalles, håper jeg du åpner en tråd for å håndtere det, som for eksempel: socket eller httplistener, osv. (datamengden er liten og du kan ikke se den, når datamengden er stor, haha, vil den dø direkte)
|