Händelser laddas och körs i huvudtråden, och om den första händelsen i huvudtråden inte är klar, kommer du till den andra händelsen, precis som andra program i huvudtråden, och väntar tills den föregående är klar innan du bearbetar nästa eller annat program eller händelse i huvudtråden.
Ovanstående är att jag själv kapslade in ett objekt, och i objektet kapslade jag själv in en händelse.
Jag bearbetar data i metoden att prenumerera på händelser, såsom bildannotationsdelen,
Eftersom händelsen jag prenumererade på var en läst txt-fil, och min txt-fil hade 50 000 rader, vilket gjorde att händelsemetoden triggades 50 000 gånger.
Sedan, när jag körde programmet, upptäckte jag att mitt gränssnitt var i ett tillstånd av suspenderad animation, och jag visste att det måste vara ett problem där.
Jag trodde först att det var manipulationen av UI-kontrollerna i metoden som orsakade falsk död.
Sedan, steg för steg, upptäcktes att när data lades till mängden hade den redan gått in i ett tillstånd av suspenderad animation.
Varför??? Till slut fick jag reda på via internet att händelsen finns i huvudtråden, och om den första händelsen inte bearbetas kommer den att blockera körningen av nästa händelse,
Jag förstod i stort sett vad jag beställde, för att uttrycka det rakt på sak, 50 000 händelser gjorde att programmet blockerades, och sedan gick jag in i ett tillstånd av suspenderad animation.
Lösning:
För vissa enkla händelser, som inte leder till exekvering av ett stort antal händelsemetoder, kan skrivas direkt in i händelsemetoden.
För ett stort antal händelsemetoder som anropas hoppas jag att du öppnar en tråd för att hantera det, som: socket eller httplistener, etc. (mängden data är liten och du kan inte se den, när datamängden är stor, haha, då dör den direkt)
|