Sobes.tech
Junior

Ինչպես կանչել անհատականացված View-ի վերաներկումը Android-ում?

sobes.tech AI

Պատասխան AI-ից

Կան մի քանի եղանակներ՝ ինչպես կանչել անձնական View-ի վերանորոգում (invalidate):

  1. invalidate():

    • Փոխում է ամբողջ View-ը:
    • Պլանավորում է onDraw()-ի կանչը:
    • Օգտագործվում է պարզ վերանորոգման համար՝ առանց կոնկրետ տարածքի նշելու:
    // Ձեր View-ի ներսում կամ նրա հետ փոխազդեցության ժամանակ
    myCustomView.invalidate()
    
  2. invalidate(Rect dirty) կամ invalidate(int left, int top, int right, int bottom):

    • Փոխում է միայն նշված View-ի տարածքը:
    • Ավելի արդյունավետ է, եթե փոփոխությունները վերաբերում են միայն մասի View-ին:
    // Փոխել տարածքը (10, 20)-ից (100, 150)
    myCustomView.invalidate(10, 20, 100, 150)
    
    // Կամ Rect-ի միջոցով
    val dirtyRect = Rect(10, 20, 100, 150)
    myCustomView.invalidate(dirtyRect)
    
  3. postInvalidate():

    • Անվտանգ է ցանկացած թելից, այդ թվում՝ ֆոնային:
    • Դնում է invalidate()-ի գործողությունը հաղորդագրությունների հերթում՝ UI թելին կատարելու համար:
    // Ֆոնային թելից կանչել
    Thread {
        // Երկար հաշվարկներ կատարել
        // ...
        myCustomView.postInvalidate()
    }.start()
    

Invalidate() և postInvalidate() համեմատություն:

մեթոդը կատարման թել ֆոնային թելից անվտանգ նպատակը
invalidate() UI թել Ոչ անմիջական վերանորոգում (այնքան, որքան հնարավոր է UI թելին)
postInvalidate() UI թել Այո հետաձգված վերանորոգում՝ հաղորդագրությունների հերթում դնելով

onDraw()-ի հետ կապ:

Համայն invalidate(...) մեթոդի կանչը պլանավորում է onDraw()-ի կատարմամբ ձեր View-ի։ Android համակարգը միավորում է մի քանի invalidate-ների պահանջները մեկում՝ արդյունավետության համար։ onDraw() կանչվում է միայն այն ժամանակ, երբ համակարգը պատրաստ է վերանորոգման:

Երբ օգտագործել յուրաքանչյուր մեթոդը:

  • Օգտագործեք invalidate(), երբ գտնվում եք UI թելին (օրինակ՝ կլիկի handler-ում, հետո անիմացիայի) և փոփոխությունները վերաբերում են ամբողջ View-ին կամ ձեզ չի հետաքրքրում տարածքի օպտիմալացումը:
  • Օգտագործեք invalidate(Rect) կամ invalidate(int, int, int, int) օպտիմալացման համար, եթե փոփոխությունները վերաբերում են միայն մասի View-ին և գտնվում եք UI թելին:
  • Օգտագործեք postInvalidate(), երբ անհրաժեշտ է կանչել invalidate ֆոնային թելից:
  • Չպետք է շատ հաճախ կանչել invalidate() կամ postInvalidate() առանց անհրաժեշտության, քանի որ դա կարող է բացասաբար ազդել կատարողականության վրա։ Կանչեք դրանք միայն այն ժամանակ, երբ տվյալները կամ վիճակը փոխվում են և դա պահանջում է տեսողական թարմացում։